2012-03-15 18 views
3

ローカルモードでjqGridを使用しています.Ajax呼び出しの一部として、有効なJS Dateオブジェクトに日付が変換されるようにJson結果が変更されています。問題は、これらが適切にソートされていないことです。jqGridがDateオブジェクトで正しくソートされていない

私colModelは以下の通りです:彼らは「順序」にあるほとんどの部分について

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

が、レコードが最初近いからである介して第1のデータの真ん中と途中からです。

ヘッダーをクリックして整列しようとすると、asc/descはまったく変わりません。私がうまく動作する別のフィールドを並べ替えると、私の日付フィールドで並べ替えると、再び壊れた並べ替えが行われますが、それはそれです。

+0

問題を解決するプールリクエストを投稿しました(私のUPDATED回答を参照)。 – Oleg

答えて

3

jqGridは比較操作でネイティブデータ型としてDateをサポートしていませんので、回避策として2つの方法をお勧めします。

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)のためにあなたはDateタイプをサポートするために、jqGridによって内部的に使用_compare機能を拡張することができます。あなたは私がthis old answerで説明したトリックを使うことができます。 _compareの利用の場合、コードは、私がthe demoでそれを証明するようにあなたがjqGridの使用前にコードを挿入することができます

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; 
}; 

になります。

更新済みthe pull request:この問題を修正しました。

+0

素晴らしいニュース:) –

+2

@ShaneCourtrille:プルリクエストがすでにマージされています([ここ](https://github.com/tonytomov/jqGrid/commit/af9a7da033856a5cd9906574885e778b5c7442fb)を参照)をメインコードjqGridでマージします。したがって、次のバージョンのjqGridは、 'Date'型のローカルデータで正しくソートされます。 – Oleg

関連する問題