根据bool更改日期值

时间:2014-10-02 08:27:55

标签: extjs extjs4.2

我想要什么

我有一个模型/商店/表格组合沸腾到:

Field Name  Type  UI Control
isAllDay    bool  Checkbox
startDate   date  DateField
endDate     date  DateField
startTime   date  TimeField
endTime     date  TimeField

如果选中isAllDay,我会将两个TimeFields设置为午夜。

但此外,我必须提前一天显示endDate字段;因为“从星期二到星期二”的意思是“星期二午夜到星期三午夜之间的24小时”和“从星期一到星期五”的意思是“星期一午夜到星期六午夜”。

所以,从2014年9月30日星期二到星期二09/30/14的isAllDay应该从2014-09-30 0:00到2014-10-01 0:00提交。

我做了什么

我尝试将convert()serialize()函数构建到模型中:

dateFormat: 'Y-m-d',
name: 'endDate',
type: 'date'
...
name:'isAllDay',
type:'boolean',
convert:function(v, rec) {
    if(v==true) {
        rec.set("endDate",Ext.Date.add(rec.get("endDate"),Ext.Date.DAY,-1));
    }
    return v;
},
serialize:function(v, rec) {
    if(v==true) {
        rec.set("endDate",Ext.Date.add(rec.get("endDate"),Ext.Date.DAY,1));
    }
    return v;
}

转换功能就像一个魅力;它甚至似乎工作得很好,序列化功能根本不起作用。

  • 我已发送isAllDay:true, startDate:2014-10-02, endDate:2014-10-03
  • convert会生成isAllDay:true, startDate:2014-10-02, endDate:2014-10-02,我在表单中看到
  • 我不会更改
  • 形式的值
  • 商店中的记录从表格
  • 更新
  • 现在该记录包含isAllDay:true, startDate:2014-10-02, endDate:2014-10-01
  • 然后商店同步,将2014-10-01发送到服务器

这到底出了什么问题?为什么不调用“序列化”,但“转换”显然是被调用两次?

编辑:我做了一个表示问题的小提琴,感谢existsdissolve的帮助:https://fiddle.sencha.com/#fiddle/b8c

0 个答案:

没有答案