相关问题:What is the replacement for metadataLoaded in JSON model?
当我在sap.ui.model.odata.v2.ODataModel
中使用metadataLoaded时,每次调用_onObjectMatched
时,metadataLoaded
也会被触发。
this.getRouter().getRoute("object").attachPatternMatched(this._onObjectMatched, this);
_onObjectMatched : function (oEvent) {
var sObjectId = oEvent.getParameter("arguments").objectId;
this.getModel().metadataLoaded().then( function() {
//fired every time
this._bindView(sObjectId);
}.bind(this));
},
但是当我在RequestCompleted
中使用sap.ui.model.json.JSONModel
时,RequestCompleted
仅在加载请求数据时触发一次。
this.getModel().attachRequestCompleted(function() {
//fired only once
this._bindView(sObjectId);
});
我很好奇为什么?我认为元数据也应该只加载一次?
更新
实际上,我已经发现metadataLoaded返回一个promise(我应该知道当我看到then()
时),但就像@Nabi指出的那样,我对promise不熟悉。在我提出这个问题之前,我应该深入挖掘。
这两个问题的目的是在JSON模型中找到metadataLoaded
的优雅和官方替代品,我应该将它们合并还是......
答案 0 :(得分:1)
_onObjectMatched()
。在那里,您总是调用this.getModel().metadataLoaded().then(...)
,而metadataLoadad()
返回一个在加载元数据时(过去或将来)解析的承诺。每次都会发生这种情况,因为每次都会调用this.getModel().metadataLoaded().then(...)
。
看看Promises可能是个好主意,我相信你会明白这个想法。事实上,请确保您了解事件和承诺之间的区别......