在 SAPUI5 (ESLINT:(sap-no-location-reload)) 上刷新完整页面的正确方法是什么?
what is th proper way to refresh a full page on SAPUI5 (ESLINT:(sap-no-location-reload))?
环境:
框架:SAPUI5
版本:1.65.6
IDE : 网络-ide
问题:
我的代码有效,但根据 IDE 可能不是正确的方式,Web-Ide return 错误:
location.reload() is not permitted. (sap-no-location-reload)
[ESLINT:
(sap-no-location-reload)]
代码(最少重现):
控制器:
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>
要复制,您可以直接复制 Web 中的代码Ide 从 SAPUI5 应用程序创建模板。
备注:
- 我知道代码与
location.reload();
一起正常工作,我想知道它们是否是在 SAPUI5 中执行相同操作的正确方法(通过正确的方法我的意思是没有 returning ESLINT 错误)
location.reload();
在控制器上的 onPressRefresh 中,它们的更多代码仅供您通过简单的复制过去在您的网络中重现问题-ide
他们的 linting 背后的原因是硬刷新的正确方法是根本不这样做。如果你想忽略这个错误,
location.reload(); // eslint-disable-line sap-no-location-reload
但是,如果刷新的唯一原因是刷新日期,则重写如下:
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();
}
});
});
环境:
框架:SAPUI5
版本:1.65.6
IDE : 网络-ide
问题:
我的代码有效,但根据 IDE 可能不是正确的方式,Web-Ide return 错误:
location.reload() is not permitted. (sap-no-location-reload)
[ESLINT: (sap-no-location-reload)]
代码(最少重现):
控制器:
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>
要复制,您可以直接复制 Web 中的代码Ide 从 SAPUI5 应用程序创建模板。
备注:
- 我知道代码与
location.reload();
一起正常工作,我想知道它们是否是在 SAPUI5 中执行相同操作的正确方法(通过正确的方法我的意思是没有 returning ESLINT 错误) location.reload();
在控制器上的 onPressRefresh 中,它们的更多代码仅供您通过简单的复制过去在您的网络中重现问题-ide
他们的 linting 背后的原因是硬刷新的正确方法是根本不这样做。如果你想忽略这个错误,
location.reload(); // eslint-disable-line sap-no-location-reload
但是,如果刷新的唯一原因是刷新日期,则重写如下:
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();
}
});
});