Extjs 如何筛选Ext.data.Store,以返回记录实例上的任何匹配项?

Extjs 如何筛选Ext.data.Store,以返回记录实例上的任何匹配项?,extjs,combobox,Extjs,Combobox,我正在尝试根据一组映射的Ext.util.Filters筛选存储。例如: comboBox.store.filter(_.map(this.displayFields, function (displayField) { return { property: displayField.name, value: queryString, anyMatch: true }; })); this.displayFields是我的组合框模板中的显示字段列表。在我的组合框

我正在尝试根据一组映射的Ext.util.Filters筛选存储。例如:

comboBox.store.filter(_.map(this.displayFields, function (displayField) {
  return {
    property: displayField.name,
    value: queryString,
    anyMatch: true
  };
}));
this.displayFields是我的组合框模板中的显示字段列表。在我的组合框模板中,我有如下内容:

'{codeValue} {displayValue} {descriptionValue}'
displayValue是我的组合框上的displayField属性。当我在组合框中搜索“co”时,当我将过滤器应用于存储时,所有显示字段的值中都必须有“co”。我的过滤器如下所示:

[
  {property: 'codeValue', value: 'co'},
  {property: 'displayValue', value: 'co'},
  {property: 'desciptionValue', value: 'co'}
] 

我想要一组在任何displayFields属性中具有值“co”的记录。

每个筛选器都在前一个筛选器之后应用,从而产生逻辑“and”。你可能已经知道了,否则你就不会问了。那么,如何使用Ext获得“or”?如果在值上是“或”,则可以在
上使用正则表达式,但您希望在
属性
上使用它。据我所知,没有一个内置的配置选项,但你可以在里面做任何你想做的事情

例如,下面是一个组合,它显示所有记录的代码或名称中都带有“a”,并且仅显示它们:

Ext.widget('combo', {
    renderTo: Ext.getBody()
    ,store: {
        fields: ['id', 'code', 'name']
        ,data: [
            {id: 1, code: 'a', name: 'Foo'}
            ,{id: 2, code: 'b', name: 'Bar'}
            ,{id: 3, code: 'ba', name: 'Baz'}
            ,{id: 4, code: 'z', name: 'Zoo'}
        ]
        ,filters: [{
            filterFn: function(record) {
                var match = false;
                Ext.each(fields, function(field) {
                    if (re.test(record.get(field))) {
                        match = true;
                        return false; // break the loop
                    }
                });
                return match;
            }
        }]
    }
    ,displayField: 'name'
    ,valueField: 'id'
});

我试试看。谢谢你的回复。