2012-05-04 6 views
7

私はExtJs 4.1フレームワークを使用しています。私は1つの列(名前)を示すグリッドを持っています。グリッドは、2つのフィールド(NameおよびSortOrder)を持つストアに関連付けられています。格納されている「名前」フィールドは、グリッドの「名前」列に関連付けられています。ストアのSortOrderフィールドで使用できる値に基づいて名前列​​を並べ替える必要があります。どのように私はそのようなロジックを実装できますか?あなただけ上書きすることができます)ExtJs 4.1グリッドの別の列に基づいて1つの列を並べ替える

 
... 
columns: [{ 
    header: 'Name', 
    dataIndex: 'Name', 
    sortable: true, 
    getSortParam: function() { 
     return 'SortOrder'; 
    } 
... 
}] 
... 

ので、代わりのdoSortを(オーバーライド:

... 
columns: [{ 
    header: 'Name', 
    dataIndex: 'Name', 
    sortable: true, 
    doSort: function(state){ 
     var ds = this.up('tablepanel').store; 
     ds.sort({ 
      property: 'SortOrder', 
      direction: state 
     }); 
    } 
    ....  
}] 

答えて

4

は、あなたがこのような何かを意味するかありがとうgetSortParam()メソッド(これはdoSort()によって使用されます)。

+0

ありがとうございました。なぜ彼らはExt.grid.column.Columnのドキュメントに「doSort」を入れていないのだろうかと思います。 +1 – T1000

+1

Ext.grid.column.Column.doSort()は内部処理に使用されるプライベートメソッドなので、一般的には私たちが使用することはお勧めしません。このため、ドキュメンテーションでは、具体的に検索したり、プライベート機能の表示を有効にしたりしない限り、表示されません。 – Yetti

19

少し簡単な解決策もあります:

+0

これが4.2.3で動作することを確認しました – Dave

+0

これは受け入れられた回答であったはずです。 – bits

+0

これは私にとってもこの問題を解決しましたが、他の参照フィールド(この場合は 'SortOrder')には独自の列があります。別のデータインデックスを与え、' getSortParam'関数をオーバーライドする必要があります。しかし、確かに理由はありません。 – Sash

0

ヘッダーをクリックする別の方法です。

columns: [ 
    { 
     header: 'Name', 
     dataIndex: 'Name', 
     listeners: { 
      headerclick: function() { 
       var store = this.up('grid').getStore(); 
       store.sort({ 
         property: 'SortOrder', 
         direction: this.sortState 
        }); 
      } 
     } 
    } 
] 
関連する問題