Как правильно обновить sh полную страницу в SAPUI5 (ESLINT: (sap-no-location-reload))? - PullRequest
0 голосов
/ 05 февраля 2020

Среда:

Каркас: SAPUI5
Версия: 1.65.6
IDE: web-ide

Проблема:

Мой код работает, но в соответствии с IDE может быть неправильно, Web-Ide возвращает ошибку:

location.reload () не разрешено. (sap-no-location-reload)
[ESLINT: (sap-no-location-reload)] * ​​1017 *

Код (минимальный для воспроизведения):

контроллер:

sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "sap/ui/model/json/JSONModel"
], function (Controller, JSONModel) {
    "use strict";

    return Controller.extend("namespace.controller.App", {
        onInit: function () {
            this.getView().setModel(new JSONModel({ 
                    actualizationDate: new Date()
                    }), "frontEnd");
        },
        onPressRefresh: function(){
            location.reload();
        }
    });
});

И представление:

<mvc:View 
    controllerName="namespace.controller.App" 
    xmlns:core="sap.ui.core"
    xmlns:mvc="sap.ui.core.mvc"
    xmlns="sap.m">
    <Shell id="shell">
        <App id="app">
            <pages>
                <Page id="page" title="{i18n>title}">
                    <content>
                        <Label text="{i18n>lastActualizedDateTime}" labelFor="lastActualizedTime" class="sapUiSmallMarginEnd"/>
                        <DateTimePicker 
                            id="lastActualizedTime" 
                            value="{path: 'frontEnd>/actualizationDate'}" 
                                    valueFormat="yyyy-MM-dd HH:mm:ss" 
                                    displayFormat="yyyy-MM-dd HH:mm:ss" 
                                    enabled="false"/>
                        <Button icon="sap-icon://refresh" type="Transparent" press="onPressRefresh"/>
                    </content>
                </Page>
            </pages>
        </App>
    </Shell>
</mvc:View>

Для воспроизведения вы можете напрямую скопировать код в WebIde, создавая шаблон из приложения SAPUI5.

Примечания:

  • Я знаю, что код нормально работает с location.reload();, я буду sh, чтобы знать, является ли их правильным способом сделать то же самое в SAPUI5 (Под надлежащим образом я имею в виду не возвращать ошибку ESLINT)
  • location.reload(); находится в onPressRefre sh на контроллере, это больше кода только для вас, чтобы вы могли воспроизвести проблему с помощью простой копии в вашем web-ide

1 Ответ

1 голос
/ 06 февраля 2020

Причиной этого существа в их подкладке является правильный способ жесткой рефрекции sh - это вообще не делать этого. Если вы хотите игнорировать ошибку,

location.reload(); // eslint-disable-line sap-no-location-reload

Однако, если единственная причина для обновления sh - это обновление sh даты, перепишите ее следующим образом:

    sap.ui.define([
        "sap/ui/core/mvc/Controller",
        "sap/ui/model/json/JSONModel"
    ], function (Controller, JSONModel) {
        "use strict";

        return Controller.extend("namespace.controller.App", {
            onInit: function () {
                this.getView().setModel(new JSONModel({ 
                        actualizationDate: new Date()
                        }), "frontEnd");
            },
            onPressRefresh: function(){
                this.refreshDate();
            },
            refreshDate: function(){
                const oModel = this.getView().getModel("frontEnd");
                oModel.setProperty("/actualizationDate", new Date();
                oModel.updateBindings();
            }
        });
    });
...