SAPUI5 - 每次显示视图时调用哪种方法?

Pap*_*apu 9 sapui5

我希望在每次显示视图之前做一些逻辑.我不能在渲染方法之前使用它,因为它只在创建视图时被调用一次并且首次显示.帮助.任何想法?

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的控制器,不会调用生命周期钩子.

  • 嗨,我正在使用基于mvc的拆分应用程序。因此,当您第一次添加详细信息页面时,将调用before渲染方法。但是,当我们下次通过toDetail调用详细信息页面时,则不调用该方法。 (2认同)

Kum*_*mar 6

对于涉及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.