OData 模型中的空日期在 DatePicker 中不起作用
Null date in OData model does not work in DatePicker
在我的流程中,我们有一个截止日期,即日期。但这个日期要等到达到某种状态后才会确定。说我想在设置之前显示这个日期,它仍然是初始的。
日期以字符串形式返回,因此在我的模型中为 00000000。 (我知道字符串不是日期,但这是我选择的,我必须接受它。)
这里是控件:
<DatePicker type="Date" placeholder="{i18n>DateStateUnknown}"
enabled="{
parts : [
{path : 'settings>/incidentLock/MayChangeResponsible'},
{path : 'DeadlineDate'}
], formatter: 'com.company.inc.util.Formatter.mayChangeDeadline' }"
displayFormat="long"
value="{path:'DeadlineDate',
type: 'sap.ui.model.type.String',
constraints: { minLength : 2},
formatter: 'com.company.inc.util.Formatter.setBaseDate'}"
valueFormat="yyyyMMdd" />
我的格式化程序如下所示:
setBaseDate: function(val){
try{
if(val=="00000000"){
return "";
}else{
return val;
}
}catch(e){
return "";
}
},
显示效果符合预期。日期为空时不显示任何内容。唯一的问题是,使用这个格式化程序,我失去了与 odata 模型的连接。这意味着每当我对值进行更改时,它都不会反映在 odata 模型中,因此我无法保存此日期。当我第一次设置一个值时也是如此,当控件仍然是空的时候。
有人知道如何解决这个问题吗?我不想将其他选项视为隐藏字段。
解决您的问题的唯一方法是
- 摆脱格式化程序,
- 空日期为
null
或空字符串,但 "00000000"
以外的任何内容
原因是,使用格式化程序会使您的控件只读,according to the API:
Currently, calculated fields work only from model to view, read only,
and the values can be accessed via a formatter function.
此外,格式为 yyyyMMdd
的日期“00000000”正确解析为 1969 年 12 月 1 日,因此如果您想避免这种情况,日期值应该不同于“00000000”[=15] =]
在我的流程中,我们有一个截止日期,即日期。但这个日期要等到达到某种状态后才会确定。说我想在设置之前显示这个日期,它仍然是初始的。
日期以字符串形式返回,因此在我的模型中为 00000000。 (我知道字符串不是日期,但这是我选择的,我必须接受它。)
这里是控件:
<DatePicker type="Date" placeholder="{i18n>DateStateUnknown}"
enabled="{
parts : [
{path : 'settings>/incidentLock/MayChangeResponsible'},
{path : 'DeadlineDate'}
], formatter: 'com.company.inc.util.Formatter.mayChangeDeadline' }"
displayFormat="long"
value="{path:'DeadlineDate',
type: 'sap.ui.model.type.String',
constraints: { minLength : 2},
formatter: 'com.company.inc.util.Formatter.setBaseDate'}"
valueFormat="yyyyMMdd" />
我的格式化程序如下所示:
setBaseDate: function(val){
try{
if(val=="00000000"){
return "";
}else{
return val;
}
}catch(e){
return "";
}
},
显示效果符合预期。日期为空时不显示任何内容。唯一的问题是,使用这个格式化程序,我失去了与 odata 模型的连接。这意味着每当我对值进行更改时,它都不会反映在 odata 模型中,因此我无法保存此日期。当我第一次设置一个值时也是如此,当控件仍然是空的时候。
有人知道如何解决这个问题吗?我不想将其他选项视为隐藏字段。
解决您的问题的唯一方法是
- 摆脱格式化程序,
- 空日期为
null
或空字符串,但"00000000"
以外的任何内容
原因是,使用格式化程序会使您的控件只读,according to the API:
Currently, calculated fields work only from model to view, read only, and the values can be accessed via a formatter function.
此外,格式为 yyyyMMdd
的日期“00000000”正确解析为 1969 年 12 月 1 日,因此如果您想避免这种情况,日期值应该不同于“00000000”[=15] =]