1

我使用 aeditorgrid来编辑 a 中的元素JsonStore。使用JsonStoreaHttpProxy来更新后端数据库。

我的问题是后端 API 期望fromTs并且toTs是 Unix 时间戳,但是当更新记录时,生成的 http post 包含格式如下的日期: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
 }
4

3 回答 3

1

我知道这个案例很老了,但我找到了解决这个问题的方法,但我从来没有在这里发布过。

我在代理的 beforewrite 事件中添加了一个监听器,并在那里操作了 post 参数

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;
        }
    }
})
于 2011-03-18T12:48:19.020 回答
0

您可能能够连接到您的validateedit事件或afteredit事件,EditorGridPanel并使用日期解析方法将用户输入的值转换回时间戳。我猜这EditorGridPanel是逐字更新存储中的记录而不将它们转换回时间戳,因此您必须手动执行此操作。所以我想也许是这样的:

grid.on('validateedit', function(event) {
  if (isDateColumn(column)) {
    event.record.data[event.field] = dateToTimestamp(event.value);
  }
}
于 2010-10-20T15:17:02.930 回答
0

问题是 JsonWriter 不尊重 JsonReader 中使用的 dateFormat 字段。这篇文章描述了这个问题以及一些可以解决它的代码。你可以在这里找到它。

于 2011-04-15T17:59:40.097 回答