Sapui5 如何延迟触发格式化程序

Sapui5 如何延迟触发格式化程序,sapui5,Sapui5,我的一个表没有加载数据,并将其中一个OData模型的错误抛出为未定义 Controller.js \u初始化数据:函数(){ var parts={}; parts.PartsByKey=“SP”; parts.price列=false; parts.SubTotalColumn=false; this.orderMaterialsModel=新的JSONModel(零件); this.getView().setModel(this.orderMaterialsModel,“orderPar

我的一个表没有加载数据,并将其中一个OData模型的错误抛出为未定义


Controller.js

\u初始化数据:函数(){
var parts={};
parts.PartsByKey=“SP”;
parts.price列=false;
parts.SubTotalColumn=false;
this.orderMaterialsModel=新的JSONModel(零件);
this.getView().setModel(this.orderMaterialsModel,“orderParts”);//行号6
此.orderMaterialsModel.setProperty(“/OrdersTotal”,0);
/*在这之前一切正常,但在执行上述声明的那一刻,
执行转到下面的格式化程序
下一行中的初始化永远不会执行,然后
格式化程序抛出错误-模型未定义*/
this.salesOrderModel=this.getOwnerComponent().getModel(“salesOrderModel”);
此._validationChecks(this.salesOrderModel.getData());
this.getView().getModel(“salesOrderModel”).refresh(false);
//...
},
//表行的格式化程序函数
格式数量:功能(数量、数量){
var oType=this.salesfordermodel.oData.type;
//此处出错,因为this.salesOrderModel不存在。。
},

设置
/OrdersTotal
值时,异步执行:

this.orderMaterialsModel.setProperty(“/OrdersTotal”,0,/*context*/null,/*async*/true);
解释 在视图定义的某个地方,必须使用
格式化程序“.formatQty”
绑定
/OrdersTotal
。在末尾调用
setProperty
而不调用
true
会首先触发所有相关侦听器(包括格式化程序),然后代码的其余部分继续

同步执行:

  • 中初始化数据

    /。。。
    此.orderMaterialsModel.setProperty(“/OrdersTotal”,0);
    
  • 格式qty
    中:

    var oType=this.salesfordermodel.oData.type;//错误!此.salesOrderModel未定义
    // ...
    
  • 继续
    \u初始化数据

    this.salesOrderModel=this.getOwnerComponent().getModel(“salesOrderModel”);
    // ...
    
  • true
    作为
    setProperty
    中的第四个参数传递将确保首先处理
    \u initializeData
    中的其余代码行,并将所有依赖侦听器作为要在调用堆栈中处理的最后一个任务

    异步执行:

  • 中初始化数据

    this.orderMaterialsModel.setProperty(“/OrdersTotal”,0,null,true);
    this.salesOrderModel=this.getOwnerComponent().getModel(“salesOrderModel”);
    //...
    
  • 格式qty
    中:

    var oType=this.salesfordermodel.oData.type;
    // ...
    

  • 另一个问题是,当刚刚设置模型时,侦听器(例如格式化程序)也会被触发

    通过使用
    requestAnimationFrame

    /。。。
    window.requestAnimationFrame(函数(){
    this.getView().setModel(this.orderMaterialsModel,“orderParts”);
    //触发格式化程序
    }.约束(这个);
    // ...
    
    对于其他读者,这可能也有帮助: