我希望在每次显示视图之前做一些逻辑.我不能在渲染方法之前使用它,因为它只在创建视图时被调用一次并且首次显示.帮助.任何想法?
Jas*_*ott 11
为什么你认为控件的before渲染方法只被调用一次?你有任何示例代码吗?
我已经在jsbin(http://jsbin.com/qikokayo/1/edit?html,output)上创建了一个快速的例子供你查看.它清楚地表明它onInit被称为一次,但onBeforeRendering每次被调用......
另请参阅OpenUI5 SDK中的这个片段,其中解释了:
生命周期钩子
onInit() - 在实例化View时调用,并且已创建其控件(如果可用).可用于在显示View之前修改View以绑定事件处理程序并执行其他一次性初始化.
onExit() - 在View被销毁时调用.使用这个来释放资源并完成活动.
onAfterRendering() - 在呈现View时调用(因此它的HTML是文档的一部分).可以在此处完成HTML的后渲染操作.此钩子与SAPUI5控件在渲染后获得的钩子相同.
onBeforeRendering() - 在重新呈现Controller的视图之前调用.如果只在第一次渲染之前调用钩子,则可以使用onInit().
对于没有View的控制器,不会调用生命周期钩子.
对于涉及a Component和关联的现代SAPUI5 fiori样式应用程序,routing您始终可以将方法附加到视图,只要与该视图提供的路径模式匹配,就会调用该方法.这条路线在历史上被提供metadata了的Component类,但因为v1.30它是在声明manifest.json文件.
在onInit您查看的方法中,您可以执行以下操作:
onInit: function() {
this._oRouter = this.getOwnerComponent().getRouter();
this._oRouter.getRoute("yourRouteForThisView").attachPatternMatched(this._onObjectMatched, this);
}
Run Code Online (Sandbox Code Playgroud)
因此_onObjectMatched,每次进入视图时都会调用该方法.在这里,您可以将所有代码放在此处,以便在呈现视图之前执行.
_onObjectMatched: function(oEvent) {
var oArgs = oEvent.getParameter("arguments");
//If any values were passed in the URL then those will be available in oArgs
//Do other stuff here
}
Run Code Online (Sandbox Code Playgroud)
您也可以将此用于登录页面.第一个视图通常有一个空字符串""作为其中的路由模式manifest.