如果将 attachPatternMatched 放在 onAfterRendering 中,为什么它在第一次加载时不起作用?
Why attachPatternMatched not working in first load if it is put in onAfterRendering?
我在我的 UI5 应用程序中使用 echarts
,所以我需要等待 dom 准备好然后执行 _onObjectMatched
,但在第一次加载时,会触发 _onObjectMatched
如果我把它放在 onInit
中,但它在 onAfterRendering
中不起作用。我在onAfterRendering里面放了一个log,所以我很确定onAfterRendering被执行了,后面调用_onObjectMatched
就OK了。顺便说一句,我正在构建主从页面。
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);
},
路由在 onInit()
之后 onAfterRendering()
之前匹配。因此,如果您在 onAfterRendering()
中附加您的事件处理程序,那么您就太晚了,错过了该事件。
如果你的echart还没有准备好,我建议在onInit()
中附加你的处理程序并将路由信息保存在控制器中。
在您的 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;
}
我在我的 UI5 应用程序中使用 echarts
,所以我需要等待 dom 准备好然后执行 _onObjectMatched
,但在第一次加载时,会触发 _onObjectMatched
如果我把它放在 onInit
中,但它在 onAfterRendering
中不起作用。我在onAfterRendering里面放了一个log,所以我很确定onAfterRendering被执行了,后面调用_onObjectMatched
就OK了。顺便说一句,我正在构建主从页面。
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);
},
路由在 onInit()
之后 onAfterRendering()
之前匹配。因此,如果您在 onAfterRendering()
中附加您的事件处理程序,那么您就太晚了,错过了该事件。
如果你的echart还没有准备好,我建议在onInit()
中附加你的处理程序并将路由信息保存在控制器中。
在您的 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;
}