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 模型中,因此我无法保存此日期。当我第一次设置一个值时也是如此,当控件仍然是空的时候。

有人知道如何解决这个问题吗?我不想将其他选项视为隐藏字段。

解决您的问题的唯一方法是

  1. 摆脱格式化程序,
  2. 空日期为 null 或空字符串,但 "00000000"
  3. 以外的任何内容

原因是,使用格式化程序会使您的控件只读,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] =]