我在我的UI5应用中使用echarts
,所以我需要等待dom然后执行_onObjectMatched
,但是在第一次加载时,如果我将其放入_onObjectMatched
,则会触发onInit
{1}},但它在onAfterRendering
中无效。我把一个登录onAfterRendering,所以我很确定onAfterRendering被执行,后来调用_onObjectMatched
就行了。顺便说一句,我正在建立一个Master-Detail页面。
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);
},
答案 0 :(得分:2)
路线在onInit()
之后但在onAfterRendering()
之前匹配。因此,如果您在onAfterRendering()
附加了您的事件处理程序,那么您就太迟了并且错过了该事件。
我建议在onInit()
中附加您的处理程序,如果您的echart没有准备就将路由信息保存在控制器中。
在初始化echart之后使用该信息来更新视图。
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;
}