8

ExtJs を使用してストアを作成し、ストアの値を ComboBox にロードしたいと考えています。しかし、値をロードする前に、別のコンボボックスで選択された値に基づいてデータをフィルタリングする必要があります。

そのためには、ストアにフィルターを適用する必要があると思います。それを行う方法を教えてください。

モデル:-

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 の場合は 3 つのレコード(バンガロール、マイソール、ダーワド)のみがコンボボックスにロードされ、stateId が 2の場合は他の 3 つのレコードがコンボボックスにロードされます。どうすれば達成できますか。

4

1 に答える 1

18

Ext.data.Store フィルターメソッドのドキュメントによると:

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

アップデート

ComboBox はそれ自体でデータをフィルター処理し、その動作を変更する機会がないことがわかりました。しかし、この問題の解決策は 2 つあります。

  1. データを手動でフィルタリングし ( Ext.util.MixedCollection filterを参照)、ストアにロードします ( Ext.data.Store loadを参照) 。

  2. ストアclearFilterfilterメソッドを無効にし、own を使用しますcityFilter

    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()メソッドを使用します。

于 2012-09-27T10:37:15.333 に答える