Javascript 加载模型之前的sapui5块视图渲染
我想在调用onBeforeRendering方法之前,在我的onInit方法中加载一个模型。 attachRequestCompleted的问题是,它在渲染后调用。 例如,我在ProcessFlow中遇到以下错误:Javascript 加载模型之前的sapui5块视图渲染,javascript,sapui5,Javascript,Sapui5,我想在调用onBeforeRendering方法之前,在我的onInit方法中加载一个模型。 attachRequestCompleted的问题是,它在渲染后调用。 例如,我在ProcessFlow中遇到以下错误: Render must not be called within Before or After Rendering Phase. Call ignored. - [object Object] 所以我的问题是:给它一个函数,在模型加载之前阻止视图 我在manifes.json上
Render must not be called within Before or After Rendering Phase. Call ignored. - [object Object]
所以我的问题是:给它一个函数,在模型加载之前阻止视图
我在manifes.json上实例化了我的视图,并在Component.js中实例化了我的模型。所以显示代码有点困难,但我加载我的模型如下:
var oModel = new JSONModel().attachRequestCompleted(function(){...});
var oConfigModel = new JSON().attachRequestCompleted(function(){
oModel.loadData(oConfigModel.getURL());
});
oConfigModel.loadData("config.json");
onInit: function() {
var oView = this.getView();
oView.setBusy(true);
// option 2 set invisible: oView.setVisible(false);
... insert model init here ...
var oModel = ...
oModel.attachEventOnce("requestCompleted", function() {
oView.setBusy(false);
// option 2 set visible: oView.setVisible(true);
});
}
我这样做是因为我在主模型的依赖关系中格式化和制作一些模型。
目前,我将数据放在xml数据绑定的ProcessFlow中。这里的一个选项是使用忙碌指示器 在
init
函数中启动指示器:
sap.ui.core.BusyIndicator.show();
sap.ui.core.BusyIndicator.hide();
…并停止attachRequestCompleted
回调函数中的指示器:
sap.ui.core.BusyIndicator.show();
sap.ui.core.BusyIndicator.hide();
更多信息。阻止用户界面从来都不是一个好主意!特别是,按照评论中的建议执行同步请求是令人敬畏的。在主流浏览器中,同步请求甚至在主线程上被弃用 在加载模型数据之前,可以将视图设置为繁忙甚至不可见,如下所示:
var oModel = new JSONModel().attachRequestCompleted(function(){...});
var oConfigModel = new JSON().attachRequestCompleted(function(){
oModel.loadData(oConfigModel.getURL());
});
oConfigModel.loadData("config.json");
onInit: function() {
var oView = this.getView();
oView.setBusy(true);
// option 2 set invisible: oView.setVisible(false);
... insert model init here ...
var oModel = ...
oModel.attachEventOnce("requestCompleted", function() {
oView.setBusy(false);
// option 2 set visible: oView.setVisible(true);
});
}
请注意,使用的是attacheventon
而不是attachRequestCompleted
,它只会执行-猜猜是什么-一次
顺便问一下:为什么阻止或根本不显示UI如此重要?即使一个视图最初可能是空的,但对于用户来说,已经看到某个内容是一种更好的体验
溴
Chris你能让模型请求同步吗?请给我们看一些代码(问题中)你是如何引导的,尤其是如何定义和实例化视图和控制器。我已经编辑了这个问题。我尝试使用BusyIndicator,但它不起作用。如果需要先获取数据,然后使用它来确定视图的哪些部分可见,哪些部分不可见,该怎么办?在异步情况下,用户可能会更快地加载视图并查看所有部分,但一旦数据加载,部分将被隐藏,我认为这对用户来说是不好的体验。