所以我有一个小的Extjs应用程序,它包含一个用户网格。每个用户都有一个字段,我从服务器发送他订阅的日期作为时间戳值(unix)。
Ext.define('AP.model.User', {
extend: 'Ext.data.Model',
fields: [
{ name: 'id', type: 'int', persist : false },
{ name: 'date_added', type: 'date', dateFormat: 'timestamp'},
{ name: 'username', type: 'string', persist : false }
]
});
网格有一个渲染器,所以我可以将时间戳渲染成人类可读的格式,例如29-Oct-2011 04:00 am
:
...
{
header: 'Date added',
align: 'center',
sortable: true,
dataIndex: 'date_added',
width: 140,
fixed: true,
renderer: Ext.util.Format.dateRenderer('d-M-Y h:i a')
}
...
现在,一切都按预期工作,值正确显示但是,我还有一个表单来编辑部分记录。在我的表单中,我可以通过提供允许我选择日期的字段xtype: 'datefield'
来编辑添加日期的字段。当我为我的记录选择一个新日期时,它会显示11/29/2011
(从我上面的日期开始),但是当我提交该表单来更新记录时,它会在请求有效负载中发布类似的内容:{"date_added": "NaN-NaN-NaNTNaN:NaN:NaN"}
。
是否有人可以了解如何在Extjs中保存以时间戳检索的字段中的日期?
答案 0 :(得分:2)
我最近用网格面板做了这个。
即使数据作为时间戳从数据库返回,使用type: date
对我来说也没问题......
// DATA MODEL
Ext.define('Particle', {
extend: 'Ext.data.Model',
fields: [
{ name: 'particle_id', type: 'long' },
{ name: 'name', type: 'string' },
{ name: 'type', type: 'string' },
{ name: 'start_date', type: 'date' },
{ name: 'sched_date', type: 'date' },
{ name: 'sched_time', type: 'date' },
{ name: 'notes', type: 'string' }
]
});
我在列模型中渲染了日期值,如下所示,请注意renderer:
配置选项。 (我正在使用field:
配置选项,因为我在其中使用了grideditor扩展来允许在网格上自行编辑数据 - 如果您以单独的形式编辑值,则不需要这样做。)
// GRID COLUMN MODEL
var columns = [
{text: "Name", flex: 1, sortable: true, dataIndex: 'name', renderer: function(data,meta,record){meta.attr = 'ext:qtitle="Notes:"ext:qtip="' + record.get('notes') + '"'; return data;}},
{text: "Type", width: 55, sortable: true, dataIndex: 'case_lvl'},
{text: "RF Started", width: 80, sortable: true, dataIndex: 'start_date', renderer: Ext.util.Format.dateRenderer('j-M-Y')},
{text: "Sched Date", width: 80, sortable: true, dataIndex: 'sched_date', field: 'datefield', renderer: Ext.util.Format.dateRenderer('j-M-Y')},
{text: "Sched Time", width: 80, sortable: true, dataIndex: 'sched_time', field: 'timefield', renderer: Ext.util.Format.dateRenderer('g:i A')}
];
要专门回答您的问题,我将日期值作为时间戳字符串返回到数据库,方法是使用Ext.Date.format()将其从字段中删除。您可以在提交表单之前添加此内容。
schedDate = Ext.Date.format(Ext.getCmp('schedDate').getValue(),'Y-m-d') + Ext.Date.format(Ext.getCmp('schedTime').getValue(),' H:i:s')
答案 1 :(得分:0)
在您的数据字段中尝试这样:
{xtype: 'datefield',
anchor: '100%',
fieldLabel: 'Date',
name: 'date',
format: 'm d Y'}
并将格式更改为'd-M-Y h:i a'