我有3个级别的UI5应用程序
着陆页,除其他事项外,它显示多个项目。在左侧,有一个导航面板,其中包含所有项目列表的链接。导航面板由具有属性itemSelect = onItemSelect的控件完成。这个onItemSelect函数看起来像这样
onItemSelect: function (oEvent) {
const item = oEvent.getParameter('item');
this.getRouter().navTo(item.getKey());
},
所有项目的清单。可以单击每个项目。在此项目列表的控制器上,有一个onInit函数,可从数据库中窃取项目列表
问题在于项目列表中的 onInit()并非总是执行。如果我打开登录页面(级别1),然后单击侧面导航以显示项目列表(级别2),则会执行 onInit(),并且所有数据都将成功加载。
但是,我还有一个选项可以打开着陆页(级别1),然后从那里单击一些最新项以直接显示其详细信息(级别3),而绕开整个项目列表。然后,如果我单击侧面导航以显示项目列表(级别2),则不会执行 onInit(),并且该列表保持为空。
有人可以向我解释为什么会发生这种情况以及如何解决吗?我了解 onInit()仅执行一次,但是我不明白为什么它不会在将要首次显示的页面上不执行...
谢谢
答案 0 :(得分:0)
jorgs建议的示例编码:
导航
# Copy/Paste file link from sharepoint below. Before...
site = "https://mycompany.sharepoint.com/:x:/r/sites/Sales/Shared%20Documents/General/My_File.xlsx?d=wb182f80code74bd586b225codebeb1c&csf=1&e=CodeeT"
# Copy/Paste file link from sharepoint below. After.
site = "https://mycompany.sharepoint.com/:x:/r/sites/Sales/Shared%20Documents/General/My_File.xlsx"
在控制器中的onInit:
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)
});
}
});
答案 1 :(得分:0)
好的,问题解决了。正如我所说,问题在于onInit甚至没有执行。这是由我犯的一个错误引起的,当我复制粘贴代码时忘记更改初始行-因此项目列表和项目详细信息在开始时都扩展了同一控制器,忘记了重写项目详细信息的代码。
`return BaseController.extend('xxx.portal.controller.item.itemList', {
因此,如果显示的商品详细信息早于商品列表,则它们还会调用商品列表的控制器,而在显示实际商品列表时不会调用它