我希望在调用onBeforeRendering方法之前在我的onInit方法中加载一个Model。 attachRequestCompleted的问题在于渲染后的某个时间。 例如,我在ProcessFlow中遇到此错误:
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");
我这样做是因为我依赖于我的主模型而形成并制作了一些模型。 目前我将数据放在ProcessFlow中,而不是数据绑定中的xml。
答案 0 :(得分:0)
此处的选项可能是使用忙碌指示器。
在init
功能中启动指示符:
sap.ui.core.BusyIndicator.show();
...并停止attachRequestCompleted
回调函数中的指标:
sap.ui.core.BusyIndicator.hide();
更多信息here。
答案 1 :(得分:0)
阻止UI永远不是一个好主意! ESP。按照评论中的建议进行同步请求是令人遗憾的。在主流浏览器的主线程上甚至不推荐使用同步请求。
您可以将视图设置为忙或甚至不可见,直到您的模型数据加载为止:
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);
});
}
请注意使用attachEventOnce
代替attachRequestCompleted
只会执行 - 猜猜 - 一次。
顺便说一句:为什么阻止或根本不显示用户界面如此重要?对于已经看到某人的用户来说,这是一种更好的体验。尽管最初视图可能是空的。
BR 克里斯