代码之家  ›  专栏  ›  技术社区  ›  Ivar Bonsaksen

ExtJS-将日期值作为Unix时间戳发布

  •  1
  • Ivar Bonsaksen  · 技术社区  · 16 年前

    我用一个 editorgrid 从中编辑元素 JsonStore . 这个 JsonStore公司 使用 HttpProxy 更新后端数据库。

    我的问题是后端API期望 fromTs 和 toTs 要成为Unix时间戳,但更新记录时,生成的http post包含如下格式的日期: Wed Oct 20 00:00:00 UTC+0200 2010

    我在API文档中搜索了一个控制post格式的参数,但是什么也找不到。有什么简单的方法可以做到这一点吗?

     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'}
      ]
     });
    

    这个 编辑网格

     {
      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
     }
    
    3 回复  |  直到 16 年前
        1
  •  1
  •   Ivar Bonsaksen    15 年前

    我知道这个案子很老了,但我找到了一个解决这个问题的办法,我从来没有来这里发帖。

    我在代理的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;
            }
        }
    })
    
        2
  •  0
  •   Kenny Peng    16 年前

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

    grid.on('validateedit', function(event) {
      if (isDateColumn(column)) {
        event.record.data[event.field] = dateToTimestamp(event.value);
      }
    }
    
        3
  •  0
  •   Gary    15 年前

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