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% 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%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:
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:
this.byId("controlId")
<core:Fragment fragmentName="my.Fragment" type="XML" />
oder
sap.ui.xmlfragment(this.getView().getId(), "my.Fragment", this)
"componentId---viewId--controlId"
[1]
this.byId(
Fragment.createId("fragmentId", "controlId")
)
<core:Fragment id="fragmentId" fragmentName="my.Fragment" type="XML"/>
oder sap.ui.xmlfragment(this.createId("fragmentId"), "my.Fragment", this)
"componentId---viewId--fragmentId--controlId"
[1]
Fragment.byId("fragmentId", "controlId")
sap.ui.xmlfragment("fragmentId", "my.Fragment", this)
"fragmentId--controlId"
sap.ui.getCore().byId("controlId")
sap.ui.xmlfragment("my.Fragment", this)
"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()
undcreateId()
.
[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--..."
.
Tags und Links sapui5