Extjs 如何筛选Ext.data.Store,以返回记录实例上的任何匹配项?
我正在尝试根据一组映射的Ext.util.Filters筛选存储。例如: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是我的组合框模板中的显示字段列表。在我的组合框
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'
});
我试试看。谢谢你的回复。