JSON模型中metadataLoaded的替代品是什么?

时间:2017-05-04 02:35:18

标签: sapui5

在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);

3 个答案:

答案 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().pSequentialImportCo‌​mpleted.then()

此处的相关问题:Why metadataLoaded can be fired multiple times?

答案 2 :(得分:0)

从1.64 1 开始,在调用loadDatadataLoadedJSONModel返回一个承诺。例如:

_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)