Сначала открывается окно «Нет данных», а затем открывается страница сведений с данными в Fiori. - PullRequest
0 голосов
/ 18 февраля 2020

Я разрабатываю приложение Master Detail, в котором, если URL-адрес службы не возвращает данные, должно открыться представление с именем «NoData». Но то, что на самом деле происходит вначале, открывается представление «NoData», а затем отображается страница сведений с данными. Я не знаю, почему и как эта страница «NoData» появляется первой. Ниже приведен мой код для мастер-страницы:

Контроллер. js:

        onInit: function () {

        this.router = sap.ui.core.UIComponent.getRouterFor(this);
        this._custTemp = this.getView().byId("listItemTemp").clone();
        this.refreshFlag = true; // Flag to get new data or not for customers


        this.totalModel = sap.ui.getCore().getModel("totalModel");
        this.getView().setModel(this.totalModel, "totalModel");

        this.oDataModel = sap.ui.getCore().getModel("DataModel");
        this.getView().setModel(this.oDataModel, "DataModel");


        this.oInitialLoadFinishedDeferred = jQuery.Deferred();
        var oEventBus = sap.ui.getCore().getEventBus();

        this.getView().byId("listId").attachEvent("updateFinished", function () {
            this.oInitialLoadFinishedDeferred.resolve();
            oEventBus.publish("MasterPage", "InitialLoadFinished", {
                oListItem: this.getView().byId("listId").getItems()[0]
            });
            if (!sap.ui.Device.system.phone) {
                this._getFirstItem();
            }
        }, this);

        this.functionData = [];
    },
waitForInitialListLoading: function (fnToExecute) {
        jQuery.when(this.oInitialLoadFinishedDeferred).then(jQuery.proxy(fnToExecute, this));
    },

    _getFirstItem: function () {
        sap.ui.core.BusyIndicator.show();
        this.waitForInitialListLoading(function () {
            // On the empty hash select the first item
            var list = this.getView().byId("listId");
            var selectedItem = list.getItems()[0];
            if (selectedItem) {
                list.setSelectedItem(selectedItem, true);
                var data = list.getBinding("items").getContexts()[0];
                sap.ui.getCore().getModel("detailModel").setData(data.getObject());

                this.router.navTo('DetailPage', {
                    QueryNo: data.EICNO
                });
                sap.ui.core.BusyIndicator.hide();
            } else {
                this.router.navTo('NoData');
            }
        }, this);
    },

    onBeforeRendering: function () {
        this._fnGetData();
    },

    _fnGetData: function (oEvent) {

        var that = this;
        this.getView().setModel(this.totalModel, "totalModel");

        if (this.refreshFlag === true) {
            sap.ui.core.BusyIndicator.show(0);

            $.ajax({
                url: "/sap/opu/odata/sap/ZHR_V_CARE_SRV/EmpQueryInitSet('10002001')?$expand=QueryLoginToQueryList/QueryToLog",
                method: "GET",
                dataType: "json",
                success: function (data) {
                    that.getView().getModel("totalModel").setData(data.d.QueryLoginToQueryList);

                    that.refreshFlag = false;
                    sap.ui.core.BusyIndicator.hide();
                    that.statusList();

                },
                error: function (err) {
                    sap.ui.core.BusyIndicator.hide();
                    MessageBox.information(err.responseText + "Please try again");
                }
            });

        }

    }

1 Ответ

2 голосов
/ 18 февраля 2020

totalModel модель json, верно? Вы получите два updateFinished события при загрузке приложения. Первый запускается, когда отображается элемент управления списком и выполняется привязка (когда модель не имеет данных), а вторая следует после того, как ваш вызов $. ajax обновляет данные до totalModel.

I Я думаю, что вы можете решить эту проблему, переместив навигацию NoData к обратным вызовам «success» и «error» вашего вызова $. ajax. Это может охватывать другие случаи использования, например, если вы используете параметры навигации URL-адреса и пользователь меняет идентификатор объекта в URL-адресе на какое-то случайное число, он переходит на вашу страницу NoData.

...