如何过滤Store extjs?

时间:2015-02-10 17:58:25

标签: extjs

我想过滤来自商店的结果,如下所示。 我有textbox如果我在其中写任何内容,那么它应该相应地过滤存储。 例如商店结果是

Monday
Tuesday
Wednesday
Thursday

过滤器应该像我输入Mon一样,那么结果应该只是Monday

我尝试了以下代码,但没有运气。

  items: {
        xtype: 'textfield',
        name: 'value',
        width : '100%',
        align: 'center',
        margin: '0 2 2 2',
        listeners : {
             change: function(field, newValue, oldValue, eOpts) {
             var gridRecords = Ext.getCmp('Grid').getStore();
             gridRecords.filter({
                               property: 'value',
                               value: newValue,
                               anyMatch: true,
                               caseSensitive: false
                                               });
                                            }
                                        }
                                      }

感谢。

3 个答案:

答案 0 :(得分:1)

如果您使用的是ExtJS 4,则需要清除之前的过滤器。正如文档所述,任何过滤器都应用于前一个过滤器。因此,在过滤商店电话gridRecords.clearFilter()之前。

这是一个有效的JSFiddle供您查看。

答案 1 :(得分:0)

不是在过滤器中使用对象,而是像这样传递值:

gridRecords.filter('value',newValue,true,false);

答案 2 :(得分:0)

以下代码会按照您的要求过滤商店,并且不区分大小写。您也可以键入字符串的任何部分,例如' es'商店将过滤显示“周二”和“周二”。和'星期三'

items: {
  xtype: 'textfield',
  name: 'value',
  width : '100%',
  align: 'center',
  margin: '0 2 2 2',
  listeners : {
    change: function(field, newValue, oldValue, eOpts) {
      var gridRecords = Ext.getCmp('Grid').getStore();
      gridRecords.filterBy(function(record){
        var value = record.get('value').toLowerCase();
        return (value.indexOf(newValue.toLowerCase()) != -1);
      })
    }
  }
}