Routing in SAPUI5: Wie implementiere ich die URL? Modelldaten werden nicht initial geladen

9

Mein Ziel ist es, eine SAPUI5 Fiori App mit Routing-Unterstützung zu schreiben. Ein E-Mail-Ziel ist die Angabe passabler URLs. Zum Beispiel in einer E-Mail wie "Bitte bestätigen Sie dies: link ". Der Link ist eine URL, die mit meiner Rounting-Konfiguration übereinstimmt, z. B. index.html#/applicants/8 .

Ich verwende eine typische sap.m.SplitApp Art von Anwendung. Durch Klicken auf ein Listenelement in Masterview wird die URL in index.html#/applicants/[id of entry in JSON] geändert. Ich kann auf die Liste klicken, meine definierten Routen werden angepasst und die Apps laden die (Bewerber-) Daten wie erwartet.

Allerdings, und hier kommt meine Frage, das funktioniert nicht, wenn Sie eine URL direkt verwenden, sagen Sie [my url]/index.html#/applicants/8 in meinen Browser einfügen. Die App wird gestartet, aber keine Detaildaten werden geladen. Ich muss erneut auf ein anderes Listenelement klicken, um die Daten zu erhalten.

Tatsächlich wird der Controller aufgerufen, wenn die URL übergeben wird, aber es scheint, dass das Modell nicht initiiert und nicht definiert ist. Mein JSON-Modell ist in der Funktion createContent meines Component.js

eingebunden

// Update 2015-05-14 Die Probleme scheinen um die Funktion getData() zu liegen. Ich habe das Modell, es hat die Einträge, aber getData() gibt undefined zurück, wenn meine App zum ersten Mal geladen wird. Ich habe kürzlich gelesen, dass getData() veraltet ist. Wie sollte ich meine Codierung unten verbessern?

%Vor%     
SDD64 12.05.2015, 11:41
quelle

1 Antwort

4

Wie Sie herausgefunden haben, gibt getData () zum ersten Mal undefined zurück, was bedeutet, dass die Modelldaten noch immer nicht geladen sind. Sie können also die Methode attachRequestCompleted des Modells & amp; feuern Sie ein Ereignis von der Komponente & amp; Hören Sie sich dieses Ereignis im Detail-Controller an, um sicherzustellen, dass routerPatternMatched () erst ausgeführt wird, nachdem die Daten geladen wurden.

// Component.js

%Vor%

// Detailregler

%Vor%

Oder die einfachste & amp; aber der schmutzige Weg wäre, eine synchrone Anfrage anstelle einer asynchronen Anfrage zum Laden von Daten zu machen.

%Vor%     
sakthi 18.05.2015, 15:33
quelle

Tags und Links