2011-05-26 39 views
0

我無法弄清楚如何發生這種情況。我使用Extjs和AJAX JSONStore從我的回調我的頁面在ASP調用數據庫並返回一些字段在這個領域有一個日期和這個日期返回適當的日期例如:「date_creat_post」:「29 \ u002F04 \ u002F2011" ...EXTJS問題與日期字段請幫助

現在,一旦我看着自己的輸出這在我的頁面在DataGrid中,我發現了以下內容:


2013年4月5日< ---->它在回調中返回的日期是04/05/2011

06/05/2012 < ---->它返回的日期Ë回調06/05/2010

07月04 < ---->它在回調返回日期是07/04/2010


我看着都吐出我的代碼看看他們是否是我加入日期1年的地方。 但無法找到它。我現在一直在嘗試至少2天來弄清楚這一點。

這裏是我的代碼:

Ext.onReady(function(){ 

Ext.QuickTips.init(); 

// for this demo configure local and remote urls for demo purposes 
var url = { 
    local: '', // static data file 
    remote: '../myurl.asp' 
}; 

// configure whether filter query is encoded or not (initially) 
var encode = true; 

// configure whether filtering is performed locally or remotely (initially) 
var local = false; 

var PostStore = new Ext.data.JsonStore({ 
    // store configs 
    autoDestroy: true, 
    baseParams : {filter : '[{"type":"boolean","value":false,"field":"is_sent_post"}]'},// we start only with is_sent == false 
    url: url.remote, 
    remoteSort: false, 
    sortInfo: { 
     field: 'date_creat_post', 
     direction: 'DESC' 
    }, 
    storeId: 'Post_Store', 

    // reader configs 
    idProperty: 'id_post', 
    root: 'Post', 
    totalProperty: 'totalcount', 
    fields: [{ 
     name: 'id_post', 
     type: 'number' 
    }, { 
     name: 'name_post', 
     type: 'string' 
    }, { 
     name: 'date_creat_post', 
     type: 'date'//, 
     //dateFormat: 'Y-m-d H:i:s' 
    }, { 
     name: 'from_addr_post', 
     type: 'string' 
    }, { 
     name: 'sender_name_post', 
     type: 'string' 
    }, { 
     name: 'is_sent_post', 
     type: 'boolean' 
    }, { 
     name: 'date_sending_post', 
     type: 'date'//, 
     //dateFormat: 'Y-m-d H:i:s' 
    }, { 
     name: 'html_post', 
     type: 'string' 
    }, { 
     name: 'list_send_post', 
     type: 'number' 
    }], 
    writer: new Ext.data.JsonWriter({ 
           writeAllFields: true  
            }), 
    autoSave: false, 
    batch: true 
}); 

var filters = new Ext.ux.grid.GridFilters({ 
    // encode and local configuration options defined previously for easier reuse 
    encode: encode, // json encode the filter query 
    local: local, // defaults to false (remote filtering) 
    filters: [{ 
     type: 'numeric', 
     dataIndex: 'id_post' 
    }, { 
     type: 'string', 
     dataIndex: 'name_post' 
    }, { 
     type: 'date', 
     dataIndex: 'date_creat_post' 
    }, { 
     type: 'string', 
     dataIndex: 'from_addr_post' 
    }, { 
     type: 'string', 
     dataIndex: 'sender_name_post' 
    }, { 
     type: 'boolean', 
     dataIndex: 'is_sent_post' 
    }, { 
     type: 'date', 
     dataIndex: 'date_sending_post' 
    }, { 
     type: 'string', 
     dataIndex: 'html_post' 
    }, { 
     type: 'numeric', 
     dataIndex: 'list_send_post' 
    }] 
});  

// use a factory method to reduce code while demonstrating 
// that the GridFilter plugin may be configured with or without 
// the filter types (the filters may be specified on the column model 
var createColModel = function (finish, start) { 

    var columns = [{ 
     dataIndex: 'id_post', 
     hidden:true, 
     header: 'Id', 
     // instead of specifying filter config just specify filterable=true 
     // to use store's field's type property (if type property not 
     // explicitly specified in store config it will be 'auto' which 
     // GridFilters will assume to be 'StringFilter' 
     filterable: true 
     //,filter: {type: 'numeric'} 
    }, { 
     dataIndex: 'name_post', 
     header: 'Subject', 
     width: 150, 
     id: 'postname', 
     filter: { 
      type: 'string' 
      // specify disabled to disable the filter menu 
      //, disabled: true 
     } 
    }, { 
     dataIndex: 'date_creat_post', 
     header: 'Date Created', 
     renderer: Ext.util.Format.dateRenderer('d/m/Y'), 

     filter: { 
      type: 'date'  // specify type here or in store fields config 
     }    
    }, { 
     dataIndex: 'from_addr_post', 
     header: 'From Address', 
     hidden:true, 
     id: 'fromaddress', 
     filter: { 
      type: 'string' 
      // specify disabled to disable the filter menu 
      //, disabled: true 
     } 
    }, { 
     dataIndex: 'sender_name_post', 
     header: 'Sender Name', 
     id: 'sendername', 
     filter: { 
      type: 'string' 
      // specify disabled to disable the filter menu 
      //, disabled: true 
     } 
    }, { 
     dataIndex: 'is_sent_post', 
     header: 'Status', 
     filter: { 
      type: 'boolean' // specify type here or in store fields config 
     }, 
     renderer: function(value) { 
      var rtn = (value == 1) ? 'sent' : 'stand-by'; 
      return rtn 
     } 
    }, { 
     dataIndex: 'date_sending_post', 
     header: 'Sending Date', 
     hidden:true, 
     //renderer: Ext.util.Format.dateRenderer('d/m/Y'), 
     filter: { 
      type: 'date'  // specify type here or in store fields config 
     }    
    }, { 
     dataIndex: 'list_send_post', 
     header: 'Opticians list', 
     hidden:true, 
     id: 'optlist', 
     filter: { 
      type: 'number' 
      // specify disabled to disable the filter menu 
      //, disabled: true 
     } 
    }]; 

    return new Ext.grid.ColumnModel({ 
     columns: columns.slice(start || 0, finish), 
     defaults: { 
      sortable: true 
     } 
    }); 
}; 
/* 
//======================contextMenu triggered by right click======================================== 
*/ 

var doRowCtxMenu = function (thisGrid, rowIndex,cellIndex, evtObj) 
{ 
    //Ext.popup.msg('Done !', 'Right clicked !'); 
    evtObj.stopEvent(); 
    var sm = thisGrid.getSelectionModel(); 
    var records = sm.getSelections(); // returns an array of Ext.data.Records 

    try 
    { 
     //var r = records[0]; // get the 1st Ext.data.Record of the list 
     thisGrid.rowCtxMenu = new Ext.menu.Menu({ 
      items: [{ 
      text : '<span style="color:red;">Delete Selected Email ?</span>', 
      handler : function() { 
            deletePost(records,thisGrid); 
            } 
        }] 
     }); 
     thisGrid.rowCtxMenu.showAt(evtObj.getXY()); 
    } 
    catch(err) 
    { 
     Ext.popup.msg('Warning !', 'You need to select a row first !'); 
    } 
}; 
/* 
//======================END contextMenu triggered by right click======================================== 
//======================Delete Post Fonction ================================================= 
*/ 
function deletePost(records,thisGrid) 
{ 

    Ext.Msg.show({ 
     title :'Warning !', 
     msg  : 'You are about to delete 1 email !', 
     buttons : Ext.Msg.YESNOCANCEL, 
     fn  : function(btn){ 
        if (btn=='yes') 
        { 
         var store = thisGrid.getStore(); 
         var s = thisGrid.getSelectionModel().getSelections(); 
         for(var i = 0, r; r = s[i]; i++){ 
          store.remove(r); 
         } 
         store.proxy.conn.url = '../myurl.asp'; 
         store.save(); 
         lastOptions = store.lastOptions; 
         /*Ext.apply(lastOptions.params, { 
         //myNewParam: true 
         });*/ 
         store.load(lastOptions); 
        } 
    }, 
     animEl : 'elId' 
    }); 
} 
/* 
//======================End delete Function======================================== 
*/ 
var Postgrid = new Ext.grid.GridPanel({ 
    id:'post_grid', 
    border: false, 
    width: 462, 
    height:250, 
    store: PostStore, 
    colModel: createColModel(8), 
    loadMask: true, 
    viewConfig:{ 
    emptyText:'No Post to display, change/clear your filters, refresh the grid or add a new Email!' 
    }, 
    plugins: [filters], 
    sm: new Ext.grid.RowSelectionModel({ 
       singleSelect: true, 
       listeners: { 
       rowselect: function(sm, row, rec) { 
            Ext.getCmp("post_form").getForm().loadRecord(rec); 
            //Ext.getCmp("htmlEdit").setValue("sdcdsdcdscsdc"); 
                } 
          } 
    }), 
    //autoExpandColumn: 'company', 
    listeners: { 
     cellcontextmenu : doRowCtxMenu, 
     render: { 
      fn: function(){ 
       PostStore.load({ 
        params: { 
         start: 0, 
         limit: 50 
        } 
       }); 
      } 
     } 
    }, 
    bbar: new Ext.PagingToolbar({ 
     store: PostStore, 
     pageSize: 50, 
     plugins: [filters] 
    }) 
}); 

// add some buttons to bottom toolbar just for demonstration purposes 
Postgrid.getBottomToolbar().add([ 
    '->', 
    { 
     text: 'Clear Filter Data', 
     handler: function() { 
      Postgrid.filters.clearFilters(); 
     } 
    } 
]); 
var panelGrid = new Ext.Panel({ 
      width : 462, 
      height : 250, 
      layout : 'fit', 
      renderTo: 'post-grid', 
      items: Postgrid 
         }); 

    }); 

我會給我的回調的螢火JSON:

{"totalcount":3, "Post": [{"id_post": 83,"name_post": "ghfgh","date_creat_post": "29\u002F04\u002F2011","from_addr_post": "[email protected]","sender_name_post": "gfh","is_sent_post": false,"date_sending_post": "29\u002F04\u002F2011","html_post": "<p>dfgdgdgd<\u002Fp>","list_send_post": null},{"id_post": 61,"name_post": "thomas test","date_creat_post": "28\u002F07\u002F2010","from_addr_post": "","sender_name_post": "","is_sent_post": false,"date_sending_post": "28\u002F07\u002F2010","html_post": "<p>test test test ets<\u002Fp>","list_send_post": null},{"id_post": 59,"name_post": "kevin test","date_creat_post": "29\u002F06\u002F2010","from_addr_post": "[email protected]","sender_name_post": "[email protected]","is_sent_post": false,"date_sending_post": "29\u002F06\u002F2010","html_post": "<p>jkljljoi ioijiio ijiojio oijio joijoi<\u002Fp>\u000A<p>&nbsp;<\u002Fp>\u000A<p><span style=\u0022background-color: #ffffff;\u0022>igiuihhuhi<\u002Fspan><\u002Fp>","list_send_post": null}]} 

在此先感謝我希望有惡人網絡上可以幫助我....

歡呼聲。


所以想很多解決方案,使得要我來這之後有問題 最後經過多次attemps格式化日期例子,在我的MSSQL數據庫 這個問題將是問題:13 \ 09 \ 2011 (d/m/Y)變成這個09/01/2012(d/m/Y),所以由於某些原因,13月份被加到月份,所以說13個月不存在,所以日期將會變爲09/01/2012 ....

在再次查看它的格式,似乎不好,所以我改變了德(米/日/年),現在我得到一個SQL錯誤,當我打了13天在我(extjs)中的datefield。

「將varchar數據類型轉換爲日期時間數據類型導致超出範圍值。」

而且現在有沒有人有任何想法?

+0

我客人,這是一個很難:)還沒有找到解決辦法。 – 2011-06-02 17:38:47

+0

還在尋找!有人幫助 – 2011-06-15 21:21:51

+0

仍然沒有安瓶:( – 2011-06-29 18:43:21

回答

0

除了使用內置的Ext.util.Format.dateRenderer,您可以嘗試創建一個自己的解析日期的所需。

ataIndex: 'date_creat_post', 
    header: 'Date Created', 
    renderer: daterenderer 

然後一個函數爲您daterenderer

function dateRenderer(value, id, r) { 
var myDate = r.data['date_creat_post']; 
// do some things here to strip out the date and make it into a happy format 
var d = new Date(myDate); 
return d.format('d/m/Y'); 
} 
+0

嗨,這是一個非常好的解決方案,但經過更多的檢查後,我注意到在從我的JSON回電日期爲例: 是** 29/04/2011和網格04/05/2013差別736天**而不是2年。我能看到的唯一可能是extjs已損壞,當我嘗試計算其他日期時,它給了我不同的結果...... – 2011-05-27 19:11:16

+0

嗨,我看起來更便宜進入這個問題,真的不能看到什麼是不對的! – 2011-09-14 19:54:33