2012-03-15 20 views
3

我們在本地模式下使用jqGrid,並且作爲ajax調用的一部分,正在修改Json結果,以便將日期轉換爲有效的JS Date對象。問題是這些沒有正確排序。jqGrid未在日期對象上正確排序

我colModel低於:

 { 
      name: 'reservationTime', 
      index: 'reservationTime', 
      sorttype: 'date' 
     } 

對於他們是「秩序」在大多數情況下,但首先是從數據的中間,中途又是一記從一開始接近。

當我點擊標題以嘗試排序它asc/desc它根本不會改變。如果我對另一個字段進行排序並且工作正常,然後再按日期字段進行排序,它會再次進行排序,但就是這樣。

+0

我發佈了可以解決問題的池請求(請參閱我的更新回答)。 – Oleg 2012-03-25 11:16:01

回答

3

jqGrid不支持Date作爲比較操作中的本機數據類型,所以我建議你採用兩種方法作爲解決方法。

1)您可以使用sorttype作爲函數。在使用Date參數調用函數的情況下,該函數可以返回可以使用的字符串而不是比較操作中的日期。例如

sorttype: function (d) { 
    if ($.isFunction(d.toISOString)) { 
     return d.toISOString(); 
    } 

    return ISODateString(d); 
    // see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date 
    function ISODateString(d) { 
     function pad(n) { return n < 10 ? '0' + n : n; } 

     return d.getUTCFullYear() + '-' 
      + pad(d.getUTCMonth() + 1) + '-' 
      + pad(d.getUTCDate()) + 'T' 
      + pad(d.getUTCHours()) + ':' 
      + pad(d.getUTCMinutes()) + ':' 
      + pad(d.getUTCSeconds()) + 'Z' 
    } 
} 

2)可以延伸通過的jqGrid內部使用,以支持Date類型_compare功能。您可以使用我在this old answer中描述的技巧。在_compare使用的情況下,代碼將

var oldFrom = $.jgrid.from; 

$.jgrid.from = function (source, initalQuery) { 
    var result = oldFrom.call(this, source, initalQuery), 
     old_compare = result._compare; 
    result._compare = function (a, b, d) { 
     if (typeof a === "object" && typeof b === "object" && 
       a instanceof Date && b instanceof Date) { 
      if (a < b) { return -d; } 
      if (a > b) { return d; } 
      return 0; 
     } 
     return _compare.call(this, a, b, d); 
    }; 
    return result; 
}; 

可以jqGrid的的使用之前插入代碼,就像我展示它the demo

已更新:我發佈了the pull request解決了這個問題。

+0

真棒新聞:) – 2012-03-27 19:35:47

+2

@ShaneCourtrille:拉的請求已經合併(見[這裏](https://github.com/tonytomov/jqGrid/commit/af9a7da033856a5cd9906574885e778b5c7442fb))與jqGrid的主代碼。因此,下一個版本的jqGrid將正確排序具有「日期」類型的本地數據。 – Oleg 2012-03-27 19:41:34