在sap.ui.model.odata.v2.ODataModel中,有一个metadataLoaded方法,我可以像这样使用它:
this.getModel().metadataLoaded().then( function() {
var sObjectPath = this.getModel().createKey("/", {
ID : sObjectId
});
this._bindView("/" + sObjectPath);
}.bind(this));
JSONModel中的,似乎没有相应的方法,因为JSONModel中没有元数据,所以还有其他解决方法吗?
我试过attachRequestCompleted
无效。
function bindview() {
that._bindView(sObjectId);
}
this.getModel().attachRequestCompleted(bindview);
答案 0 :(得分:0)
正如你所说,没有元数据。但对于Json模型,您为什么要等待任何事件?您可以直接绑定视图。
答案 1 :(得分:0)
attachRequestCompleted
仅在加载模型时触发一次,所以我以这种方式解决了这个问题:
jsonModelLoaded: false,
_onObjectMatched : function (oEvent) {
if(this.jsonModelLoaded) {
this._bindView(sObjectId);
}
function bindview() {
that.jsonModelLoaded = true;
that._bindView(sObjectId);
}
this.getModel().attachRequestCompleted(bindview);
}
另一个未记录的解决方案是使用this.getModel().attachRequestCompleted().pSequentialImportCompleted.then()
答案 2 :(得分:0)
从1.64 1 开始,在调用loadData
或dataLoaded
时JSONModel
返回一个承诺。例如:
_onObjectMatched: function(oEvent) {
const myJSONModel = this.getView().getModel();
const sObjectId = /*...*/;
myJSONModel.dataLoaded().then(() => this._bindView(sObjectId));
},
与v2ODatamodel.metadataLoaded()2
不同的是,如果请求失败,此处的承诺会实际上拒绝。
1 提交:bd4e2fc
2 即使加载元数据文档失败,从metadataLoaded()
返回的承诺也不会拒绝。但是,since 1.79,应用程序可以将true
作为参数来获取可捕获的承诺:metadataLoaded(true)
。