UI5 - navTo не запускает событие onInit на странице, которая еще не отображалась - PullRequest
0 голосов
/ 07 июня 2019

У меня есть приложение UI5 с 3 уровнями

  1. / home

целевая страница, которая, помимо прочего, отображает несколько элементов.Слева находится панель навигации, которая содержит ссылку на список всех элементов.Панель навигации выполняется элементами управления, которые имеют свойство itemSelect = onItemSelect.Эта функция onItemSelect выглядит следующим образом

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

список всех предметов.Каждый элемент можно нажать.В контроллере этого списка элементов есть функция onInit, которая выводит список элементов из базы данных

/ home / items / {itemId} - сведения об элементе

Проблема в том, что onInit () в списке элементов не всегда выполняется.Если я открою целевую страницу (уровень 1) и затем нажму на боковую навигацию, чтобы отобразить список элементов (уровень 2), onInit () будет выполнено, и все данные будут успешно загружены.

Тем не менее, у меня также есть возможность открыть целевую страницу (уровень 1) и оттуда нажать на несколько новейших предметов, чтобы отобразить их детали напрямую (уровень 3), минуя весь список предметов.И затем, если я нажимаю на боковую навигацию, чтобы отобразить список элементов (уровень 2), onInit () не выполняется и список остается пустым.

Может кто-нибудь объяснить мнепочему это происходит и как это исправить?Я понимаю, что onInit () выполняется только один раз, но я не понимаю, почему он не выполняется на странице, которая будет отображаться в первый раз ...

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

ОК, проблема решена.Как я уже сказал, проблема была в том, что onInit даже не выполнялся.Это было вызвано ошибкой, которую я сделал, забыл изменить начальную строку, когда я копировал код - так что и список элементов, и детали элементов расширяли один и тот же контроллер в начале, забыл переписать код для деталей элемента.

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

Таким образом, если сведения об элементе отображались раньше, чем список элементов, они также вызывали контроллер для списка элементов, и он не вызывался при отображении фактического списка элементов

0 голосов
/ 09 июня 2019

пример кодирования из предложения 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 в контроллере:

    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"
        });
    }
});

});

-> источник: https://help.sap.com/doc/saphelp_uiaddon20/2.05/en-US/23/66345a94f64ec1a80f9d9ce50a59ef/content.htm?no_cache=true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...