2012-04-05 7 views
2

ソートセットの一部であるカラム/データストアフィールドにアクセスする方法を教えてください。ExtJSグリッドでは、ソートセットの一部であるデータストアフィールドにアクセスするにはどうすればいいですか

グリッドのソートパラメータを変更してリモートソートを行う予定です。列のフィールドのマッピングプロパティと一致させるために、リモートソートパラメータのソートキーが必要です。通常の「列ヘッダークリックがデータをソートする」機能はありますが、これらのことが起こる必要があります。

+0

') – gbegley

+0

docsには、' Ext.util.Sorter 'オブジェクトのコレクションである' sorters 'プロパティがあります。ソースはソートの 'プロパティ'メソッドにアクセスできるはずであることを示していますが、ドキュメントにはありません。 – gbegley

答えて

2

リモートソートやフィールドマッピング(ExtJSに4.1)

この機能は、ExtJSの中で実装されていないようです。 original methodを上書きするより適切だろう、しかし

var store = Ext.create('Ext.data.Store', { 
    ..., 
    proxy: { 
     ..., 
     encodeSorters: function (sorters) { 
      var model = store.proxy.model, 
       map = model.prototype.fields.map; 
      return Ext.encode(Ext.Array.map(sorters, function (sorter) { 
       return { 
        property : map[sorter.property].mapping || sorter.property, 
        direction: sorter.direction 
       }; 
      })); 
     } 
    } 
}); 

:ここでExtJSの4へのアクセスのフィールドは、モデルのプロトタイプthroughtマップ以来提供encodeSorters機能を用いて、溶液が少し汚れているが、それは仕事をしていません

Ext.data.proxy.Server.override({ 
    encodeSorters: function(sorters) { 
     var min, map = this.model.prototype.fields.map; 
     min = Ext.Array.map(sorters, function (sorter) { 
      return { 
       property : map[sorter.property].mapping || sorter.property, 
       direction: sorter.direction 
      }; 
     }); 
     return this.applyEncoding(min); 
    } 
}); 
0

simpleSortModeを使用していると仮定すると、店舗でこれを行うことができます。私はbeforeload」に例えば(列のフィールドを取得し、その後、ソートされ、その後、それらのフィールドの「マッピング」を決定し、最終的にリモートソートのソートパラメータを設定するためにマッピングを使用する列を決定する必要があり

listeners: { 
     beforeload: function(store, operation, eOpts) { 
      if (store.sorters.length > 0) { 


       var sorter = store.sorters.getAt(0), 
       dir = sorter.direction, 
       prop = sorter.property, 
       fields = store.model.getFields(), 
       i, 
       applyProp = prop; 

       for (i = 0; i < fields.length; i++) { 
        if (fields[i].name == prop) { 
         applyProp = fields[i].mapping || prop; 
         break; 
        } 
       } 

       //clearing the sorters since the simpleSortMode is true so there will be only one sorter 
       store.sorters.clear(); 
       store.sorters.insert(0, applyProp, new Ext.util.Sorter({ 
        property : applyProp, 
        direction: dir 
       })); 
      } 

     } 

    }, 
関連する問題