Zugriff auf Elemente aus XML-Fragment nach ID

8

Ich arbeite an einer SAPUI5-Anwendung. Ich habe eine XML-Ansicht, die ein XML Fragment und einen Button zum Speichern enthält.

Das Fragment enthält einige Steuerelemente wie Dropdown, Textfeld und eine Tabelle. Wenn ich auf die Schaltfläche zum Speichern drücke, muss ich alle Zeilen in der Tabelle abrufen und einen OData-Aktualisierungsdienst aufrufen.

Das Problem liegt in der Methode onSave im View-Controller. Ich bekomme einen Fehler beim Zugriff auf die Tabelle mit seiner ID. Kann mir jemand helfen und Ratschläge geben, wie kann ich auf Steuerelemente zugreifen, die in Fragmenten anhand ihrer ID im Controller verwendet werden?

Hier ist das Code-Snippet:

---- Ansicht

%Vor%

---- Fragmentdefinition

%Vor%

---- Controller

%Vor%     
Nilesh Puranik 23.09.2016, 11:54
quelle

3 Antworten

9

Betrachtet man den openui5-Code von github, so scheint es, dass das Fragment die lokale ID-Generierung an die enthaltende Ansicht delegiert, wenn <Fragment/> selbst nicht eine explizite ID hat.

Der Code this.getView().byId("tab1") sollte also funktionieren, sobald Sie das id="fr1" -Attribut aus Ihrem <Fragment/> -Element entfernen.

Bei Verwendung expliziter IDs gibt es ein statisches Fragment .byId () Methode zum Abrufen des Steuerelements. Ich denke du musst es so benutzen:

%Vor%     
schnoedel 23.09.2016, 12:51
quelle
5

Der Zugriff auf Steuerelemente in einem Fragment hängt davon ab, wie Ihr Fragment ursprünglich erstellt wurde . Hier ist eine Liste von Fällen mit der entsprechenden API, die verwendet werden soll, um die Kontrollreferenz zu erhalten:

Gegeben

  • this ist eine Referenz auf die Controller-Instanz selbst
  • Fragment ist der Parametername für das aufgelöste Modul, das von der Abhängigkeitsdefinition angegeben wird:

    %Vor%

API zu verwenden

this.byId("controlId")

  • Wenn das Fragment mit einer Ansichts-ID erstellt wurde (was implizit in XML-Ansichten angegeben wird):
    • In XMLView: <core:Fragment fragmentName="my.Fragment" type="XML" /> oder
    • Im Controller: sap.ui.xmlfragment(this.getView().getId(), "my.Fragment", this)
  • Globale ID: "componentId---viewId--controlId" [1]

this.byId( Fragment.createId("fragmentId", "controlId") )

  • Wenn die Ansichts-ID und eine Fragment-ID angegeben wurde:
    • <core:Fragment id="fragmentId" fragmentName="my.Fragment" type="XML"/> oder
    • sap.ui.xmlfragment(this.createId("fragmentId"), "my.Fragment", this)
  • Globale ID: "componentId---viewId--fragmentId--controlId" [1]

Fragment.byId("fragmentId", "controlId")

  • Nur bei Fragment-ID : sap.ui.xmlfragment("fragmentId", "my.Fragment", this)
  • Globale ID: "fragmentId--controlId"

sap.ui.getCore().byId("controlId")

  • Wenn keine IDs angegeben wurden: sap.ui.xmlfragment("my.Fragment", this)
  • Globale ID: "controlId"

Was wir unbedingt vermeiden müssen, ist die Verkettung von ID-Teilen oder die Verwendung der Syntax der globalen ID in irgendeiner Weise, wie in Kommentar sowie in der Dokumentation :

  

Weist nicht auf die spezifische Präfix-Syntax zu, da sie sich irgendwann ändern kann. Verwenden Sie immer Methoden wie byId() und createId() .

[1]: Die Komponenten-ID ist kein Teil der globalen ID, wenn keine stabile ID wurde für die Ansicht gegeben. In diesem Fall beginnt die globale ID mit der generierten Ansichts-ID: "__xmlview0--..." .

    
boghyon 18.12.2017 16:26
quelle
1

Damit es ohne explizite Fragment-ID und ohne statisches Fragment.byId () funktioniert, habe ich das folgende Code-Snippet verwendet:

%Vor%

Danach können Sie this.getView (). byId ("tab1") wie mit jedem anderen Steuerelement verwenden.

    
slkorolev 23.09.2016 13:38
quelle

Tags und Links