extjs 3在客户端过滤

时间:2014-12-09 03:39:11

标签: extjs filtering

我想根据商店中的数据在客户端进行过滤。

我在商店中有所有信息,我想在这些商店上制作过滤器而不回调服务器。有没有办法做到这一点?。

以下是我的代码:

    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);

2 个答案:

答案 0 :(得分:0)

下面是我根据年龄过滤商店并在组合框的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);

答案 1 :(得分:0)

我找到了解决方法。我添加了autoLoad:true,用于存储以获取所有数据和使用模式:'local'用于组合框。