Sapui5 如何延迟触发格式化程序
我的一个表没有加载数据,并将其中一个OData模型的错误抛出为未定义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
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”);
//触发格式化程序
}.约束(这个);
// ...
对于其他读者,这可能也有帮助: