簡體   English   中英

從帶有 ISO 8601 格式的 JsonStore 保存記錄時,如何讓 ExtJS 包含時區?

[英]How to get ExtJS to include timezone when saving record from JsonStore w/ISO 8601 format?

在下面的代碼片段中,我正在創建一個 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"}}

更新 Ext-JS 4 的答案:

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

沒關系,顯然神奇的谷歌短語是“extjs time zone serialize”。 這似乎是一個已知問題 解決方案似乎相當簡單:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM