1

州名、首都、寒い天気を表示するグリッドをロードするストアがあります。

[寒い天気]列の[はい]の値に応じてストアをフィルタリングするチェックボックスもあります。

チェックボックスをクリックすると、グリッドは「はい」の状態をフィルタリングして表示しますが、チェックボックスをオフにすると、何も実行されません。

ストアを元に戻して前のストアを表示するにはどうすればよいですか?以下は私のチェックボックスフィールドです。助けてください。

items: [
    {
        xtype: 'checkboxfield',
        boxLabel: 'Show only Cold State',
        scope: this,
        handler: function (field, value) {
            scope: this,
            this.checkValue = field.getValue();
            console.log(this.checkValue);
            if (this.checkValue == true) {
                this.store.filter('Cold', 'Yes');
            }
            else if (this.checkValue == false) {
            }
        },

更新されたコード-これを行うと、このエラーが発生します

TypeError:tempstore1は未定義です

items: [
    {
        xtype: 'checkboxfield',
        boxLabel: 'Show only Cold State',
        scope: this,
        handler: function (field, value) {
            scope: this,
            this.checkValue = field.getValue();
            console.log(this.checkValue);
            if (this.checkValue == true) {
                var tempstore1 = Ext.StoreMgr.lookup('store');
                tempstore1.filters.add('CheckBoxFilter', new Ext.util.Filter({
                    property: 'Cold',
                    value: 'Yes',
                    root: 'myTable'
                }));
                console.log('here');
                tempstore1.load();
            }
            else if (this.checkValue == false) {
                this.store.filters.removeAtKey('CheckBoxFilter');
            }
        },

2回目の更新-このエラーが発生しました

TypeError:a.getRoot.call(a、d)が未定義です

それ以外の

var tempstore1 = Ext.StoreMgr.lookup('store');

使ってます

var tempstore1 = Ext.getCmp('GridArea1').store;

GridArea1グリッドパネルのIDです。

3回目の更新-このエラーが発生します

var tempstore1 = Ext.getCmp('GridArea1').getStore();

chromeデバッガーからのエラー...「true」と「here」は私のconsole.logであり、「h」の部分も同様です...これは私のデータの代わりにtempstore1が持っているものです。

true
h {hasListeners:e、scope:h、loading:false、events:Object、eventsSuspended:false…}
here
Uncaught TypeError:undefinedのプロパティ'Cold'を読み取ることができません

4

1 に答える 1

5

あなたが使用する必要がありますclearFilter()

xtype: 'checkboxfield',
boxLabel: 'Show only Cold State',
scope: this,
handler: function (field, value) {
    this.checkValue = field.getValue();
    console.log(this.checkValue);
    if (this.checkValue == true) {
        this.store.filter('Cold', 'Yes');
    }
    else if (this.checkValue == false) {
        this.store.clearFilter();
    }
}

特定のフィルターを削除することができます(clearFilter()すべてを削除します)。store.filter('property_to_filter','value')メソッドを使用する代わりに、次を使用します。

store.filters.add('Coldfilter', new Ext.util.Filter({
    property: 'Cold',
    value: 'Yes',
    root: 'data'
}));
store.load();

フィルタを削除するには、次を使用します。

store.filters.removeAtKey('Coldfilter');

フィルタに追加しようとしているドキュメントには何もありませんでしたがroot: 'data'、現在は機能しています:http: //jsfiddle.net/vrVRP/2/

于 2012-11-14T21:32:14.137 に答える