我使用editorgrid
编辑JsonStore
中的元素。 JsonStore
使用HttpProxy
来更新后端数据库。
我的问题是后端API期望fromTs
和toTs
是Unix时间戳,但是当更新记录时,生成的http帖子包含一个格式如下的日期:Wed Oct 20 00:00:00 UTC+0200 2010
我在API文档中搜索了一个参数来控制帖子格式,但是我找不到任何东西。有一种简单的方法可以做到这一点吗?
myJsonStore = new Ext.data.JsonStore({
autoLoad: true,
autoSave: true,
proxy: new Ext.data.HttpProxy({
api: {
create: '/create/',
read: '/read/',
update: '/update/',
destroy:'/destroy/'
}
}),
writer: new Ext.data.JsonWriter({
encode: true,
writeAllFields: true
}),
idProperty: 'id',
fields: [
{name: 'id', type: 'int'},
{name: 'fromTs', type: 'date', dateFormat:'timestamp'},
{name: 'toTs', type: 'date', dateFormat:'timestamp'}
]
});
editorgrid
配置如下:
{
xtype: 'editorgrid',
clicksToEdit: 1,
columns: [
{header: "Id", dataIndex: 'id', editable: false},
{header: "From", dataIndex: 'fromTs', editor: new Ext.form.DateField({format: 'd.m.Y', startDay: 1}), xtype: 'datecolumn', format: 'd.m.Y'},
{header: "To", dataIndex: 'toTs', editor: new Ext.form.DateField({format: 'd.m.Y', startDay: 1}), xtype: 'datecolumn', format: 'd.m.Y'}
],
store: myJsonStore
}
答案 0 :(得分:1)
我知道这个案子已经过时了,但我找到了解决这个问题的方法,我从来没有在这里发帖。
我在代理的beforewrite事件中添加了一个监听器,并操纵了那里的post params
proxy: new Ext.data.HttpProxy({
api: {
create: '/create/',
read: '/read/',
update: '/update/',
destroy:'/destroy/'
},
listeners: {
beforewrite: function(proxy, action, record, params) {
var fromTs = record.data.fromTs;
var toTs = record.data.toTs;
if(record.data.fromTs) record.data.fromTs = fromTs.format('U');
if(record.data.toTs) record.data.toTs = toTs.format('U');
// Update record to be sent
// root = store.reader.root
params.root = Ext.util.JSON.encode(record.data);
// Restore record
record.data.fromTs = fromTs;
record.data.toTs = toTs;
}
}
})
答案 1 :(得分:0)
您可以使用日期解析方法挂钩validateedit
afteredit
事件或EditorGridPanel
事件,并将用户输入的值转换回时间戳。我猜测EditorGridPanel
正在逐字更新商店中的记录而不将它们转换回时间戳,因此您必须手动执行此操作。所以我想的可能是:
grid.on('validateedit', function(event) {
if (isDateColumn(column)) {
event.record.data[event.field] = dateToTimestamp(event.value);
}
}
答案 2 :(得分:0)
问题是JsonWriter不尊重JsonReader中使用的dateFormat字段。这篇文章描述了这个问题以及一些将解决它的代码。你可以找到它here。