Sapui5 设置新模型后传递的格式化程序参数为null

Sapui5 设置新模型后传递的格式化程序参数为null,sapui5,Sapui5,在列表对象的XML中,我使用了格式化程序: {path:'Erdat',格式化程序:'.formatter.dateFormatter'} 这正如预期的那样工作,我可以看到Erdat的绑定值传递到dateFormatter中,然后进行适当的格式化。但是,在我的应用程序上,我可以选择重新调用后端网关服务,这将重新将新获取的数据绑定到列表(listLogs): oActLogs.read(“/ActivityLogsSet”{ 成功:功能(oData、oResponse){ setData(oDa

在列表对象的XML中,我使用了格式化程序:

{path:'Erdat',格式化程序:'.formatter.dateFormatter'}
这正如预期的那样工作,我可以看到
Erdat
的绑定值传递到
dateFormatter
中,然后进行适当的格式化。但是,在我的应用程序上,我可以选择重新调用后端网关服务,这将重新将新获取的数据绑定到列表(
listLogs
):

oActLogs.read(“/ActivityLogsSet”{
成功:功能(oData、oResponse){
setData(oData);
setModel(oActivityLogsModel);
oGlobalBusyDialog.close();
},
// ...
});
这是可行的,我可以看到从服务中提取的新数据。但是,当我将这个新模型设置为
listLogs
时,格式化程序被命中,但这次它被传递到
null
,然后当格式化程序尝试使用这个值执行任何操作时崩溃


我已经调试并看到,在第二次调用中,获取的数据不是null,那么为什么要将null传递给格式化程序?

如果我不得不猜测,我会说绑定中的任何更改都会触发格式化程序。这也可能是在绑定新模型之前发生的“解除绑定”。或者在实际加载数据之前绑定新模型

为什么不在格式化程序中执行以下操作:

dateFormatter:函数(oValue){
如果(!oValue){
返回“”;
}
//做真正的事情
}
让格式化程序返回有用的内容(至少是一个空字符串)是一种很好的做法,即使它的输入很糟糕,但由于不同的原因(模型尚未存在,数据尚未加载,…)很容易发生这种情况。这将防止您的UI显示“未定义”之类的丑陋内容

BTW:你是否考虑过使用日期格式?

溴 克里斯

I(…)将新获取的数据重新绑定到列表

oActLogs.read(“/ActivityLogsSet”{
成功:功能(oData、oResponse){
setData(oData);
setModel(oActivityLogsModel);
oGlobalBusyDialog.close();
},
// ...
});
假设可以将
ActivityLogsSet
直接绑定到列表,那么这可能根本不是必需的。之后你可以打电话

例子

(聚合绑定负责发送请求并将数据设置到列表中。)

然后在控制器的某个地方:

onRefreshButton按:function(){
this.byId(“listLogs”).getBinding(“items”)/*ODataListBinding*/.refresh();
},
绑定发送新请求(
refresh()
)后,当接收到数据时将触发格式化程序,但从一开始就使用正确的值而不是
null


{path:'Erdat',格式化程序:'.formatter.dateFormatter'}

您甚至可能不需要自定义的日期格式化程序。请参见

谢谢Chris,您是对的,我看到它两次命中格式化程序,一次是null,然后是新值。下面我将研究一下类型选项well@Joe关于日期格式的类型:对于OData,该主题可能也有帮助。只是好奇:不将
/ActivityLogsSet
直接绑定到列表的原因是什么?例如,
。为什么要使用中间JSONModel(
oActivityLogsModel
)?