Как заставить ExtJS включать часовой пояс при сохранении записи из формата JsonStore w / ISO 8601? - PullRequest
3 голосов
/ 08 ноября 2010

В приведенном ниже фрагменте я создаю JsonStore (тип записи которого представляет собой одно поле даты), добавляю в него новую запись и сохраняю ее. При сохранении часовой пояс не включается в сериализованное значение даты, даже если он включен в фактический объект записи (как показано Firebug). Ext, похоже, конвертирует дату в часовой пояс браузера, но затем удаляет часовой пояс при отправке запроса на сервер. Я использую формат даты и времени ISO 8601 ('c'), который, если я правильно читаю документы Ext, должен включать часовой пояс.

Даже если он конвертируется в часовой пояс браузера, для меня это не будет проблемой, если он включает этот часовой пояс при сохранении записи. В его нынешнем виде сервер должен быть написан таким образом, чтобы он анализировал входящие даты в часовом поясе браузера, но отправлял их клиенту в возможно другом часовом поясе, что выглядит глупо. Какие-либо предложения? Я прочитал несколько, казалось бы, связанных вопросов на форумах Ext, но, похоже, они имели дело с немного другими проблемами.

var myDataStore = new Ext.data.JsonStore({
    url: '/api/echo',    
    writer: new Ext.data.JsonWriter({
        encode: false,
        writeAllFields: true
    }),
    root: 'records',
    fields: [
        {name: 'myDate', type: 'date', dateFormat: 'c'}
    ],
    autoSave: false,
    autoLoad: false
});

myDataStore.add(new myDataStore.recordType({myDate: Date.parseDate('2010-11-08T11:00:00.000-0000','c')}));
myDataStore.save();

Сериализованные данные (без часового пояса):

{"records":{"myDate":"2010-11-08T06:00:00"}}

Ответы [ 2 ]

4 голосов
/ 05 января 2012

Обновление ответа для Ext-JS 4:

Ext.JSON.encodeDate = function(o)
{
   return '"' + Ext.Date.format(o, 'c') + '"';
};
3 голосов
/ 08 ноября 2010

Неважно, по-видимому, волшебная фраза Google была "extjs serialize serialize".Похоже, это известная проблема .Решение кажется довольно простым:

Ext.util.JSON.encodeDate = function(o)
{
   return '"' + o.format('c') + '"';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...