客户端的extjs3过滤器

客户端的extjs3过滤器,extjs,filtering,Extjs,Filtering,我想在客户端根据存储中的数据制作一个过滤器 我在商店里有所有的信息,我想在这些商店上做一个过滤器,而不回叫服务器。有什么办法吗 下面是我的代码: Ext.each(this.filterFieldsOptions, function(attribute) { var field = {}}, field = { xtype : 'pet.

我想在客户端根据存储中的数据制作一个过滤器

我在商店里有所有的信息,我想在这些商店上做一个过滤器,而不回叫服务器。有什么办法吗

下面是我的代码:

    Ext.each(this.filterFieldsOptions, function(attribute) {
            var field = {}}, 

field =
                        {
                            xtype           : 'pet.filtermulticombobox',
                            hideOnSelect    : false,
                            name            : 'category',
                            triggerAction   : 'all',
                            emptyTextKey    : _('Categories'),
                            ref             : '../category',
                            store           : new Ext.data.Store({
                                                proxy: new Ext.data.HttpProxy({url: '/pet/product/get-categories-json'}),
                                                reader: new Ext.data.JsonReader({
                                                    totalProperty: 'total',
                                                    root:'records'
                                                },
                                                [{name: 'id'}, {name: 'name'}, {name: 'name_en'}, {name: 'class'}])
                                              }),
                            valueField      : 'id',
                            displayField    : 'name_en',
                            classField      : 'class',
                            mode            : 'remote',
                            width           : 125,
                            listWidth       : 400,
                            typeAhead       : true,
                            listeners       : {
                                scope   : this,
                                select  : function() {
                                    this.fireEvent('filter');
                                }
                            },
                            filter: {
                                anyMatch: true,
                                caseSensitive: true
                            }

                        }
                    ;


this);

下面是一个简单的例子,我根据年龄过滤存储,并在combobox的beforerender事件中应用过滤器

var comboFilter=function(){
     var names = Ext.create('Ext.data.Store', {
               fields: [
                        {name: 'name',  type: 'string'},
                        {name: 'age',   type: 'int'}
                       ],
               data : [
                          {"name":"x", "age":20},
                          {"name":"y", "age":25},
                          {"name":"z", "age":28},
                          {"name":"xy", "age":30}

                       ]
});


  Ext.create('Ext.form.ComboBox', {
      fieldLabel: 'Choose name',
      store: names,
      listeners:{
        beforerender:function(thiss){
          var me=this;
          var store=this.store;

          store.filterBy(function(record){
               if(record.get('age')>=28){
                 return false;
                }else{
                return true;
                }
          });
        }
},
queryMode: 'local',
displayField: 'name',
valueField: 'age',
renderTo: Ext.getBody()
 });
  }
    Ext.onReady(comboFilter);

我已经找到了解决办法。我添加了autoLoad:true,用于存储获取所有数据,并为combobox使用模式:“local”

var comboFilter=function(){
     var names = Ext.create('Ext.data.Store', {
               fields: [
                        {name: 'name',  type: 'string'},
                        {name: 'age',   type: 'int'}
                       ],
               data : [
                          {"name":"x", "age":20},
                          {"name":"y", "age":25},
                          {"name":"z", "age":28},
                          {"name":"xy", "age":30}

                       ]
});


  Ext.create('Ext.form.ComboBox', {
      fieldLabel: 'Choose name',
      store: names,
      listeners:{
        beforerender:function(thiss){
          var me=this;
          var store=this.store;

          store.filterBy(function(record){
               if(record.get('age')>=28){
                 return false;
                }else{
                return true;
                }
          });
        }
},
queryMode: 'local',
displayField: 'name',
valueField: 'age',
renderTo: Ext.getBody()
 });
  }
    Ext.onReady(comboFilter);