1

1つのグリッド列をフィルタリングするには、次を使用します。

store.filter({
          property: 'first_name',
          anyMatch: true,
          value   : this.getValue()
      });

次に、次のように、一度に複数のフィールドを検索する必要があります。

      var filters = [
    new Ext.util.Filter({
    property: "first_name", anyMatch: true, value: this.getValue()
    }),
    new Ext.util.Filter({
   property: "last_name", anyMatch: true, value: this.getValue()
   })
 ];
  store.filter(filters);

奇妙なことに、どちらの場合も、単一の検索のみが機能します

これは役に立ちませんでした複数のextjsグリッド列をフィルタリングする方法は?

4

1 に答える 1

2

フィルターを実装する方法に基づいて、remoteSort: falseヒントとして使用していると思います。フィルターのインスタンスを作成する必要はなく、構成を提供するだけです。できればスペアthis。ほとんどのイベントはコンポーネントのインスタンスを提供し、代わりにそれを使用しますthis。それはあなたの頭痛を救うことができます。

私はそれをテストし、それは動作します。簡単な例を次に示します。

Ext.create('Ext.data.Store', {
    storeId:'simpsonsStore',
    fields:['name', 'email', 'phone'],
    data:{'items':[
        { 'name': 'Lisa',  "email":"lisa@simpsons.com",  "phone":"555-111-1224"  },
        { 'name': 'Lisam',  "email":"lisa@simpsons.com",  "phone":"555-222-1234" },
        { 'name': 'Bart',  "email":"bart@simpsons.com",  "phone":"555-222-1234" },
        { 'name': 'Homer', "email":"home@simpsons.com",  "phone":"555-222-1244"  },
        { 'name': 'Marge', "email":"marge@simpsons.com", "phone":"555-222-1254"  }
    ]},
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            root: 'items'
        }
    }
});

Ext.create('Ext.grid.Panel', {
    title: 'Simpsons',
    tbar: [{
        text: 'filter',
        handler: function(btn) {
            var g = btn.up('grid');
            g.store.filter([{property: "name", anyMatch: true, value: 'Lisa'},{property: "email", anyMatch: true, value: 'lisa@simpsons.com'}])
        }
    }],
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [
        { text: 'Name',  dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});

ここにJSFiddleがあります

テキストフィールド付きのバージョン 2

Ext.create('Ext.data.Store', {
    storeId:'simpsonsStore',
    fields:['name', 'email', 'phone'],
    data:{'items':[
        { 'name': 'Lisa',  "email":"lisa@simpsons.com",  "phone":"555-111-1224"  },
        { 'name': 'Lisam',  "email":"lisa@simpsons.com",  "phone":"555-222-1234" },
        { 'name': 'Bart',  "email":"bart@simpsons.com",  "phone":"555-222-1234" },
        { 'name': 'Homer', "email":"home@simpsons.com",  "phone":"555-222-1244"  },
        { 'name': 'Marge', "email":"marge@simpsons.com", "phone":"555-222-1254"  }
    ]},
    proxy: {
        type: 'memory',
        reader: {
            type: 'json',
            root: 'items'
        }
    }
});

Ext.create('Ext.grid.Panel', {
    title: 'Simpsons',
    tbar: [{
        xtype: 'textfield',
        emptyText: 'filter',
        listeners: {
            specialkey: function(field, e){
                if (e.getKey() == e.ENTER) {
                    var g = field.up('grid'),
                        value = field.getValue(); 
                    g.store.filter({scope: this, filterFn: function(rec) { 
                    var rege = new RegExp(".*" + value + ".*"); 
                    if (rege.test(rec.data.name) || rege.test(rec.data.email)) {
                        return true;
                    }
                    return false;
                } 
            });
                }
            }
        }
    }],
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [
        { text: 'Name',  dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});​

そしてJSFiddle

于 2012-12-03T08:45:43.153 に答える