Routing UI5-navTo未在尚未显示的页面上启动onInit事件
我有一个具有3个级别的UI5应用程序Routing UI5-navTo未在尚未显示的页面上启动onInit事件,routing,sapui5,Routing,Sapui5,我有一个具有3个级别的UI5应用程序 /家 登录页,其中显示多个项目。左侧有一个导航面板,其中包含指向所有项目列表的链接。导航面板由属性为itemSelect=onItemSelect的控件完成。此onItemSelect函数如下所示 onItemSelect: function (oEvent) { const item = oEvent.getParameter('item'); this.getRouter().navTo(i
itemSelect=onItemSelect
的控件完成。此onItemSelect
函数如下所示
onItemSelect: function (oEvent) {
const item = oEvent.getParameter('item');
this.getRouter().navTo(item.getKey());
},
onInit
函数,用于从数据库加载项目列表
我知道onInit()只执行一次,但我不明白为什么它不会在第一次显示的页面上执行。来自jorgs建议的示例编码: 导航:
onPress: function (oEvent) {
var oItem = oEvent.getSource();
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("detail", {
invoicePath: oItem.getBindingContext("invoice").getPath().substr(1)
});
}
onInit in控制器:
sap.ui.define([
"sap/ui/core/mvc/Controller"], function (Controller) {
"use strict";
return Controller.extend("sap.ui.demo.wt.controller.Detail", {
onInit: function () {
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.getRoute("detail").attachPatternMatched(this._onObjectMatched, this);
},
_onObjectMatched: function (oEvent) {
this.getView().bindElement({
path: "/" + oEvent.getParameter("arguments").invoicePath,
model: "invoice"
});
}
});
}))
-->来源:好的,问题解决了。正如我所说的,问题是onInit甚至没有被执行。这是由我犯的一个错误引起的,当我复制粘贴代码时,忘记更改初始行-因此items list和items details在开始时都扩展了同一个控制器,忘记了为item details重写代码
`return BaseController.extend('xxx.portal.controller.item.itemList', {
因此,如果项目详细信息的显示时间早于项目列表,那么他们也会调用项目列表的控制器,并且在实际项目列表显示时不会调用该控制器。你的应用程序中的大多数东西现在还没有准备好。它触发一次,通常在路由器启动之前。如果你像你看起来那样使用路由器,一个更好的选择是
这个.getRouter().getRoute('routename').attachPatternMatched(函数(oEvent)…
。把它放在你控制器的onInit
。