Extjs извлекает и записывает метки времени - PullRequest
2 голосов
/ 22 декабря 2011

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

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Я недавно сделал это с сеткой.

Несмотря на то, что данные возвращаются из базы данных как отметка времени, использование 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')
0 голосов
/ 22 декабря 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...