如何在Controller的Init函数内访问oData模型(UI5程序)?

时间:2016-09-24 16:04:56

标签: sapui5

任何人都可以告诉如何访问Controller Init()内的oData Model(Manifest.json)吗?

我尝试通过Component.js访问。尝试在Component.js中的代码下面

var oModel = this.getModel("destinModel");
this.setModel(destinModel,"Model");
控制器Init()中的

功能 -

var oComponent = this.getOwnerComponent();
var oModel = oComponent.getModel("Model");

当我在Init Function中使用它时,这不起作用,但它在onAfterRendering()内工作。

我需要访问控制器的Init()内部的模型..如果我不能请建议我访问模型的任何其他方法..

1 个答案:

答案 0 :(得分:1)

我还注意到,只有在视图的init函数执行完毕后才会将模型传递给视图。但是,当执行视图的init函数时,模型已经存在于组件中。因此,您可以使用this.getComponent().getModel()代替this.getModel()来访问它。 E.g:

onInit: function() {
    this.component = this.getComponent();
    this.model = this.component.getModel("destinModel");
    this.setModel(this.model, "Model");
},

为了能够从init函数实际访问模型(如果您打算这样做),您必须等到模型的元数据被加载。要在加载元数据后立即运行代码,ODataModel将提供metadataLoaded函数。此函数返回一个可以连接您的功能的承诺。 E.g:

onInit: function() {
    this.component = this.getComponent();
    this.model = this.component.getModel("destinModel");
    this.setModel(this.model, "Model");
    this.model.metadataLoaded().then(function() {
        alert("We have the model to our disposal at this point");
    }.bind(this));
},