2016-06-10 6 views
1

Ich habe zwei Ansichten sagen View1.xml und View2.xml In beiden implementierte ich onInit() und onAfterRendering(). Ich habe auch den Zurück-Knopf implementiert, wo ich einfach router.navTo() Methode verwende.onInit, onAfterRendering nicht aufgerufen, wenn zurück auf die Seite

Wenn ich von View2 zu View1 zurückkehre, wird view1s onInit/onAfterRendering nicht aufgerufen. Dasselbe passiert auch, wenn ich die Zurück-Taste des Browsers drücke.

Bitte helfen!

+0

Können Sie Ihren Code teilen? – Rayon

Antwort

0

onInit wird nur und immer genau einmal aufgerufen, so ist es definiert! Anstatt sich auf onAfterRendering zu verlassen, sollten Sie auf die übereinstimmenden Ereignisse der Routen achten, siehe das Navigations- und Routing-Tutorial des SDK! Sie wissen nie genau, WANN eine Ansicht neu gerendert wird, also vergewissern Sie sich, dass es für uns sinnvoll ist, das DOM zu modifizieren, nachdem das erneute Rendern stattgefunden hat oder wenn Sie Drittanbieter-Bibliotheken irgendwo im DOM registrieren müssen ...

+0

Danke !! Ein weiterer Zweifel, ein Browser Referresh (F5) würde das sap.ui.core.model löschen? – user12

0

Ich überprüfte es in einem Beispielprojekt. Es scheint, dass die erste Sicht nicht zerstört wurde, sondern nur in den Hintergrund ging. Wenn Sie die Zurück-Operation starten, wird nur die erste Ansicht nach oben verschoben, ohne die Rendering-Methoden aufzurufen.

Was möchten Sie in den Renderer-Methoden tun?

  • Wenn Sie Daten bezüglich Änderungen sichtbar machen möchten, ist rerendering nicht notwendig, da es automatisch von Daten fertig ist verbindlich
  • Wenn Sie ein Steuerelement aktualisieren möchten, können Sie .invalidate() oder .rerender() eine Steuerung direkt, denen Rufen Sie die richtige Lebenszyklusmethode des Steuerelements auf. Es ist viel besser, als die ganze Ansicht neu darzustellen.

das rerendering Um zu erzwingen, Sie die Ansicht ungültig machen können this.getView().invalidate() oder this.getView().rerender() in den Navigationsereignishandler verwenden. Achten Sie darauf, diese beiden Methoden nur bei Bedarf aufzurufen, da dies die Leistung Ihrer Website beeinträchtigt.

+0

Danke !! Ein weiterer Zweifel, ein Browser Referresh (F5) würde das sap.ui.core.model löschen? – user12

+0

Ja, es löscht das Modell und alles andere. Sie müssen die Daten erneut abrufen - dies wird automatisch durchgeführt, da die gesamte Seite erneut geladen wird (Ansichten, Controller werden erneut erstellt). – nistv4n

+0

Ich musste einige Daten in core.model speichern, die in mehreren Seiten verwendet wurden, daher das Problem !! – user12

0

Bitte versuchen Sie dieses Stück Code in der oninit() wie unten dargestellt:

onInit : function() {

this.getView().addEventDelegate({ 

     onBeforeShow:function(evt) 
     { 
      alert("Hi U came to init function"); 

} })

}, Hoffnung dies funktionieren wird . Bitte überprüfen Sie es und lassen Sie mich wissen, wenn es funktioniert. Danke, Deepak Raj.

Verwandte Themen