UI5-navTo尚未在尚未显示的页面上启动onInit事件

时间:2019-06-07 14:37:59

标签: routing sapui5

我有3个级别的UI5应用程序

  1. / home

着陆页,除其他事项外,它显示多个项目。在左侧,有一个导航面板,其中包含所有项目列表的链接。导航面板由具有属性itemSelect = onItemSelect的控件完成。这个onItemSelect函数看起来像这样

    onItemSelect: function (oEvent) {
        const item = oEvent.getParameter('item');
        this.getRouter().navTo(item.getKey());
    },
  1. / home / items

所有项目的清单。可以单击每个项目。在此项目列表的控制器上,有一个onInit函数,可从数据库中窃取项目列表

  1. / home / items / {itemId}-项目详细信息

问题在于项目列表中的 onInit()并非总是执行。如果我打开登录页面(级别1),然后单击侧面导航以显示项目列表(级别2),则会执行 onInit(),并且所有数据都将成功加载。

但是,我还有一个选项可以打开着陆页(级别1),然后从那里单击一些最新项以直接显示其详细信息(级别3),而绕开整个项目列表。然后,如果我单击侧面导航以显示项目列表(级别2),则不会执行 onInit(),并且该列表保持为空。

有人可以向我解释为什么会发生这种情况以及如何解决吗?我了解 onInit()仅执行一次,但是我不明白为什么它不会在将要首次显示的页面上不执行...

谢谢

2 个答案:

答案 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)
        });
    }

});

->来源:https://help.sap.com/doc/saphelp_uiaddon20/2.05/en-US/23/66345a94f64ec1a80f9d9ce50a59ef/content.htm?no_cache=true

答案 1 :(得分:0)

好的,问题解决了。正如我所说,问题在于onInit甚至没有执行。这是由我犯的一个错误引起的,当我复制粘贴代码时忘记更改初始行-因此项目列表和项目详细信息在开始时都扩展了同一控制器,忘记了重写项目详细信息的代码。

`return BaseController.extend('xxx.portal.controller.item.itemList', {

因此,如果显示的商品详细信息早于商品列表,则它们还会调用商品列表的控制器,而在显示实际商品列表时不会调用它