2016-11-12 1 views
0

Ich verwende echarts in meinem UI5 App, also muss ich dom bereit warten und dann _onObjectMatched ausführen, aber in der ersten Last wird _onObjectMatched ausgelöst, wenn ich es in onInit setzen, aber es funktioniert nicht in onAfterRendering. Ich habe mich in AfterRendering eingeloggt, also bin ich ziemlich sicher, dass onAnderRendering ausgeführt wird und der spätere Aufruf von _onObjectMatched OK ist. BTW, ich baue eine Master-Detail-Seite.Warum AttachPatternMatched funktioniert nicht in der ersten Ladung, wenn es in OnAfterRendering eingefügt wird?

onInit : function() { 
    this.getRouter().getRoute("object").attachPatternMatched(this._onObjectMatched, this); 
} 

onAfterRendering: function() { 
    this.getRouter().getRoute("object").attachPatternMatched(this._onObjectMatched, this); 
} 

getRouter : function() { 
    return sap.ui.core.UIComponent.getRouterFor(this); 
}, 

Antwort

2

Die Route wird nach onInit() abgestimmt, aber vor onAfterRendering(). Wenn Sie also Ihren Eventhandler in onAfterRendering() anhängen, sind Sie einfach zu spät und verpassen das Event.

Ich würde empfehlen, Ihren Handler in onInit() zu befestigen und die Routeninformationen in der Steuerung zu speichern, wenn Ihr Diagramm nicht bereit ist. Verwenden Sie diese Informationen, nachdem Ihr Diagramm initialisiert wurde, um Ihre Ansicht zu aktualisieren.

onAfterRendering:function(){ 
    //init charts 
    this._chartReady = true; 
    this._updateViewFromRoute(); 
}, 
onBeforeRendering:function(){ 
    this._chartReady = false; 
}, 
_onObjectMatched:function(oEvent){ 
    //Save Args 
    this._routerArgs = oEvent.getParameter("arguments"); 
    this._updateViewFromRoute(); 
}, 
_updateViewFromRoute:function(){ 
    if(!this._chartReady) return; 
    if(!this._routerArgs) return; 
    //do something with this._routerArgs 
    this._routerArgs = null; 
} 
Verwandte Themen