ExtJs(4.2):在DateColumn中显示日期时间时保持时间

时间:2016-02-10 14:06:22

标签: date datetime extjs extjs4.2

我在datecolumn中有grid

我通过以下格式从后端获得价值:Y-m-d H:i:s。我必须将其显示为d.m.Y。发回时我必须再次发送Y-m-d H:i:s

我的代码如下:

模型

{
    name: 'REA_LIT_URSPR',
    type: 'date', 
    dateFormat:'Y-m-d H:i:s.0'
}

查看

{
    xtype: 'datecolumn',    
    format:'d.m.Y',         
    text: 'Ursp. LT',
    align: 'center',
    flex:1,
    dataIndex: 'REA_LIT_URSPR',
    editor: {
        xtype: 'datefield',
        format:'d.m.Y',
        editable: false
    }
} 

现在的问题是,如果我得到这个值2016-04-05 23:15:03.0,它会正确显示。但是,只要我点击它进行编辑(并在不选择新日期的情况下取消它),我就会丢失时间23:15:03.0并将其更改为00:00:00.0

我想坚持这一次,以防用户点击单元格更改日期但改变主意并单击其他位置而不更改日期。

我使用Ext.grid.plugin.CellEditing来制作网格可编辑。

有人可以告诉我我做错了什么或者我如何实现目标?

2 个答案:

答案 0 :(得分:1)

ExtJS CellEditing插件不支持"取消"用户编辑 - 只要您点击该字段然后离开,该字段就会被验证,如果没有失败,则进行编辑"。这在RowEditing中有所不同,其中显示取消按钮将取消编辑并触发canceledit事件而不验证输入。

因此,您必须在CellEditing插件上使用beforeeditvalidateedit事件。如何使用它们在ExtJS文档中有很好的描述,它记录了如何同时访问日期字段,记录和存储。示例代码:

beforeedit:function( editor, context, eOpts ) {
  editor.oldTime = context.record.data.REA_LIT_URSPR;// Save old value.
},
validateedit:function ( editor, context, eOpts ) {
    if(editor.context.value == editor.oldTime) // Compare Values and decide
        context.cancel = true;                 // whether to save it or not

}

答案 1 :(得分:-1)

{
    xtype: 'datecolumn',    
    format:'Y-m-d g:i:s A',         
    text: 'Ursp. LT',
    align: 'center',
    flex:1,
    dataIndex: 'REA_LIT_URSPR',
    editor: {
        xtype: 'datefield',
        format:'Y-m-d g:i:s A',
        editable: false

    }
} 

好的,所以问题出在列日期格式上,也许你会丢失一部分日期,因为g:i:s不会从日期栏中保存。

我没有尝试过代码,但如果它不起作用,请尝试使用这些文档http://docs.sencha.com/extjs/5.1/5.1.1-apidocs/#!/api/Ext.Date-method-parse创建新的日期格式(在extjs 4上相同)

抱歉第一个答案,不清楚问题