Extjs получение и запись временных меток

Итак, у меня есть небольшое приложение 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 в полях, которые извлекаются как метки времени?


person Romeo M.    schedule 22.12.2011    source источник


Ответы (2)


Недавно я сделал это с помощью gridpanel.

Несмотря на то, что данные возвращаются из базы данных в виде метки времени, использование 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')
person egerardus    schedule 29.12.2011

попробуйте так в поле данных:

    {xtype: 'datefield',
    anchor: '100%',
    fieldLabel: 'Date',
    name: 'date',
    format: 'm d Y'}

и измените формат на 'd-M-Y h:i a'

person Hadas    schedule 22.12.2011
comment
Ввод формы отображается в соответствии с этим форматом, но полезная нагрузка запроса, отправленная на сервер, по-прежнему "date_added":"NaN-NaN-NaNTNaN:NaN:NaN" - person Romeo M.; 22.12.2011
comment
Я предполагаю, что полезная нагрузка запроса - это то, что extjs фигурирует как преобразование из unix в дату, но то, что я отправляю, на самом деле является строкой даты, а не отметкой времени unix. - person Romeo M.; 22.12.2011
comment
Измените формат даты в вашей модели на «d-M-Y h:i a». Скажи, если это поможет. - person Hadas; 25.12.2011
comment
С этим форматом даты модуль записи отправляет наполовину правильную дату (2011-12-26T00:00:00), но программа чтения перестала отображать дату, так как я получаю метку времени с сервера. - person Romeo M.; 26.12.2011
comment
поэтому дата получения с сервера (при необходимости конвертировать...) в вашу форму - person Hadas; 26.12.2011