Javascript SAPUI5在正确的时间分配模型

Javascript SAPUI5在正确的时间分配模型,javascript,sapui5,Javascript,Sapui5,我有一个函数,它应该从我的odata服务中读取一个实体,并将其作为模型提供给我的预处理器。 当我试着调试代码时,我看到oDataModel是在预处理器之后加载的。因此,在预处理器中,我的变量“oDataModel”未定义 我找不到将JSONModel分配给变量的正确顺序 sap.ui.define([ "sap/ui/core/UIComponent", "sap/ui/Device", "Test_Start/model/models", "sap/ui/model/odata/v2/ODat

我有一个函数,它应该从我的odata服务中读取一个实体,并将其作为模型提供给我的预处理器。 当我试着调试代码时,我看到oDataModel是在预处理器之后加载的。因此,在预处理器中,我的变量“oDataModel”未定义

我找不到将JSONModel分配给变量的正确顺序

sap.ui.define([
"sap/ui/core/UIComponent",
"sap/ui/Device",
"Test_Start/model/models",
"sap/ui/model/odata/v2/ODataModel",
"sap/ui/core/util/XMLPreprocessor"
], function(UIComponent, Device, models, ODataModel, XMLPreprocessor) {
"use strict";
var oDataModel;
return UIComponent.extend("Test_Start.Component", {

    metadata: {
        manifest: "json"
    },


    createContent: function() {

        var oModel = new ODataModel("/XXX/"),
        oMetaModel = oModel.getMetaModel(),
        sPath = "/ColumnSet",
        oViewContainer = new sap.m.VBox();


        oMetaModel.loaded().then(function() {

            oModel.read("/DataSet(0)",{
            method: "GET",
            success:function(oData) {
                    oDataModel = new sap.ui.model.json.JSONModel(oData);
                    console.log(oDataModel);
                    },
            error: function(){

            }
            });
            var oTemplateView = sap.ui.view({
                preprocessors: {
                    xml: {
                        bindingContexts : {
                            meta : oMetaModel.getMetaContext(sPath)
                        },
                        models: {
                            meta: oDataModel
                        }
                    }
                },
                type : sap.ui.core.mvc.ViewType.XML,
                viewName: "Test_Start.view.View"
            });
            oTemplateView.setModel(oModel);
            oTemplateView.bindElement(sPath);
            oViewContainer.addItem(oTemplateView);

        });

        return oViewContainer;

    }



});


});
多亏了这一点,我找到了解决方案:

createContent:function(){
var oModel=新的ODataModel(“/sap/opu/odata/sap/ZPFO_CKPT_odata_DYN_SRV/”),
oMetaModel=oModel.getMetaModel(),
sPath=“/ColumnSet”,
oDataModel,
oViewContainer=new sap.m.VBox();
oMetaModel.loaded().then(函数()){
oModel.read(“/DataSet(0)”{
方法:“获取”,
成功:功能(oData){
oDataModel=new sap.ui.model.json.JSONModel(oData);
控制台日志(oData);
console.log(oDataModel);
var oTemplateView=sap.ui.view({
预处理器:{
xml:{
绑定上下文:{
meta:oMetaModel.getMetaContext(sPath)
},
型号:{
meta:oDataModel
}
}
},
类型:sap.ui.core.mvc.ViewType.XML,
viewName:“Test_Start.view.view”
});
setModel(oModel);
bindElement(sPath);
oViewContainer.addItem(oTemplateView);
},
错误:函数(){}
});
});
返回oViewContainer;
}
});

为什么不在成功函数中包含oTemplateView代码块?这样,您可以保证它只在oDataModel已填充时执行。