[从带有ISO 8601格式的JsonStore中保存记录时,如何使ExtJS包括时区?

问题描述 投票:3回答:2

在下面的代码段中,我正在创建一个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"}}
javascript datetime extjs timezone
2个回答
4
投票

更新Ext-JS 4的答案:

Ext.JSON.encodeDate = function(o)
{
   return '"' + Ext.Date.format(o, 'c') + '"';
};

3
投票

[没关系,显然Google妙用是“ extjs时区序列化”。这似乎是known issue。解决方案似乎很简单:

Ext.util.JSON.encodeDate = function(o)
{
   return '"' + o.format('c') + '"';
}
© www.soinside.com 2019 - 2024. All rights reserved.