2016-03-24 3 views
0

Ich habe einen typischen Controller und eine JS-View.onAfterRendering Anruf vor Datenansichten geladen, verwenden Sie die Fabrik

In der Ansicht habe ich eine Fabrik-Funktion ein Element Liste wie folgt zu erstellen:

new sap.m.List(this.createId("myList"), { 
    noDataText: "{i18n>textNoData}", 
    items: { 
     path: "/PathToServiceApp", 
     sorter: new sap.ui.model.Sorter("Date"), 
     factory: this.itemFactory.bind(this) 
    } 
}); 

this.itemFactory: function (sId, oContext) { 
    ... 
}, 

und im Controller verwenden ich die onAfterRendering Live-Zyklus-Methode:

onAfterRendering: function() { 
    ... 
} 

Problem: onAfterRendering ist aufgerufen, bevor die View Daten aus dem Pfad "/ PathToServiceApp" bezieht.

Haben Sie eine Idee, wie Sie onAfterRendering aufrufen können, nachdem Daten geladen und DOM-Elemente erstellt wurden?

Antwort

1

onAfterRendering wird nach jeweils Rendering aufgerufen werden.

In der Funktion können Sie nicht auf die Daten zählen, da ein Rendering auftreten kann, bevor die Daten geladen werden, wenn das Modell Daten asynchron lädt. Wenn die Daten des in der Bindung verwendeten Pfades (in Ihrem Fall /PathToServiceApp) sich ändern, werden die Steuerelemente in der Bindung aktualisiert und onAfterRendering wird erneut aufgerufen.

Wenn Sie die Listenelemente ändern möchten, nachdem sie gerendert wurden, sollten Sie ihre onAfterRendering Funktion anstelle der Controller einhängen.

+0

ok, vielleicht wissen Sie, wie man Daten synchron bekommt (ich benutze OData Modell)? Thx for help – migacz1125

+0

Für das ODataModel sieht das nicht so aus. – hirse

0

Steuerelemente, die auf ListBase basieren, verfügen über ein UpdateFinished-Ereignis, das ausgelöst wird, nachdem die Bindung von Elementen aktualisiert und vom Steuerelement verarbeitet wurde. Wenn Sie Code ausführen möchten, nachdem die Daten in Ihre List geladen wurden, ist es am besten, dieses Ereignis an diese Logik anzuhängen.

Verwandte Themen