如何确保在初始视图加载之前完成组件中的oData读取

问题描述 投票:0回答:2

因此,我需要在应用程序的component.js中进行odata调用,并且基于响应,我必须在控制器的onInit上执行某些代码。但是,当我检查网络调用时,我看到该调用没有完全完成,这就是为什么我在控制台中看到错误的原因,因为它尝试访问该模型,但是自成功处理程序执行以来就没有创建它不被调用。有什么办法吗?

javascript sapui5
2个回答
0
投票

这里是一个例子:

Component.js:

this.promise = $.Deferred()
oDataModel.read("DataSet", {
    success: (oData)=>{
        this.promise.resolve(oData);
    },
    error: (oError)=>{
        this.promise.reject(oError)
    }
});
this.promise.promise();

控制器:

this.getComponent().promise.then((oData)=>{
    // your code...
});

0
投票

Component.js:

onInit: function() {
  oDataModel.read("/SET", {
    success: function(oData) {
      // your code before view creation

      // create root view etc
      UIComponent.prototype.init.apply(this, arguments);

      // get your root view and controller if needed
      const oView = this.getRootControl();
      const oController = oView.getController();

      // instantiate router
      this.getRouter().initialize();
    },
    error: function(oError) {
      // error handling
    }
  });

  // code that is not depending on the promise
}

请注意,根视图是在控制器之前创建的。

这里是app startup的文档

© www.soinside.com 2019 - 2024. All rights reserved.