2012-09-27 5 views
8

ExtJsを使用してストアを作成しました。ストアの値をComboBoxにロードします。しかし、値をロードする前に、私は別のcomboBoxで選択された値に基づいていくつかのデータをフィルタリングする必要があります。ExtJsストアでフィルターを使用する方法は?

だから、私は店にフィルターを適用する必要があると思うので、どのように私はそれを行うことができますどのような体を助けてください。

モデル: -

Ext.define('City', { 
extend: 'Ext.data.Model', 
fields: [ 
     { name: 'StateId', type: 'string' }, 
     { name: 'City', type: 'string' }, 
]}); 

ストア: -

var cityStore = Ext.create('Ext.data.Store', { 
model: 'City', 
data : [ 
    { StateId: '1', City: 'Bangalore'}, 
    { StateId: '1', City: 'Mysore'}, 
    { StateId: '1', City: 'Dharwad'}, 
    { StateId: '2', City: 'Mumbai'}, 
    { StateId: '2', City: 'Pune'}, 
    { StateId: '2', City: 'Nagpur'} 
    ]}); 

は、今私はコンボボックスにロードするには、このcityStoreを使用しています。しかしロード前に私が望む前にstateIdが1の場合、(Bangalore、Mysore、Dharwad)はコンボボックスにロードされ、stateIdが2の場合、他の3レコードはコンボボックスにロードされます。どのように私はそれを達成することができます。​​メソッドのドキュメントによると

+0

これを確認することができます。JSFiddleの作業サンプルとともに、小さなチュートリアルがあります。 http://atechiediary.blogspot.com/2013/06/extjs-how-to-filter-data-of-store-in.html – DarkKnightFan

答えて

18

var stateId = 1; // your value 
cityStore.clearFilter(true); 
cityStore.filter('StateId', stateId); 

更新

私は、コンボボックス自体がデータをフィルタリングし、それが行動だ変更する機会がないことを発見しました。 (Ext.util.MixedCollection filterを参照)手動

  1. フィルターデータとお店にロード(Ext.data.Store loadを参照)

  2. 無効に店のclearFilterfilter方法とcityFilter自身を使用します:しかし、私はこの問題の2つのソリューションを参照してください

    Ext.define('CityStore', { 
        extend: 'Ext.data.Store', 
        filter: Ext.emptyFn, 
        clearFilter: Ext.emptyFn, 
        cityFilter: function (stateId) { 
         Ext.data.Store.prototype.clearFilter.call(this); 
         Ext.data.Store.prototype.filter.call(this, 'StateId', stateId); 
        } 
    }); 
    

    cityFilter()メソッドを使用します。

+0

が動作していません。 – Popeye

+0

どのExtJsバージョンを使用していますか? –

+0

私はExt JS 4.0.7 – Popeye

関連する問題