ExtJS - Опубликовать значения даты как метку времени Unix - PullRequest
1 голос
/ 20 октября 2010

Я использую 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
 }

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Я знаю, что этот случай старый, но я нашел решение этой проблемы, которое я так и не смог опубликовать здесь.

Я добавил слушателя к событию 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;
        }
    }
})
0 голосов
/ 15 апреля 2011

Проблема в том, что JsonWriter не поддерживает поле dateFormat, используемое в вашем JsonReader.Этот пост описывает проблему вместе с некоторым кодом, который решит ее.Вы можете найти его здесь .

0 голосов
/ 20 октября 2010

Возможно, вы сможете подключиться к событию validateedit или afteredit вашего EditorGridPanel и преобразовать введенное пользователем значение обратно во временную метку, используя метод анализа даты. Я предполагаю, что EditorGridPanel дословно обновляет записи в магазине, не преобразуя их обратно в метки времени, так что вы должны сделать это вручную. Так что я думаю, может быть, что-то вроде:

grid.on('validateedit', function(event) {
  if (isDateColumn(column)) {
    event.record.data[event.field] = dateToTimestamp(event.value);
  }
}
...