我试图在两列上过滤商店,一列有一个数组,另一列有一个单词的开头(它将是AND,而不是OR)。 所以我知道如何使用数组过滤商店:
grid.store.load().filterBy(function(record, id){
return Ext.Array.indexOf(filter, record.get("type")) !== -1;
}, this);
我知道如何使用单词的开头过滤商店:
{id: 'name', property: "name", value: newValue, anyMatch: true}
但我不知道如何将两者结合起来。
我试过了:
grid.store.load().filterBy(function(record, id){
if(Ext.Array.indexOf(filter, record.get("type")) !== -1 && record.get("name").indexOf(newValue) !== -1){
return record;
}
}, this);
但是当我只想要匹配使其有效时,它会返回整个单词。如何捕捉到部分内容?
答案 0 :(得分:1)
通过在每次过滤时创建新过滤器,可以在模型的多个字段上过滤存储。可以通过将anyMatch
设置为true或使用正则表达式来过滤部分单词。
这里我创建了一个使用anyMatch
过滤网格列的示例。
https://fiddle.sencha.com/#fiddle/ts4
列上方的部分文本字段代码(示例应用中的FilterField):
keyup: {
fn: function(field, event, eOpts) {
var grid = this.up('grid'),
/* only filter when value is empty and key is backspace or delete */
isValidKey = ((event.keyCode === Ext.event.Event.BACKSPACE || event.keyCode === Ext.event.Event.DELETE) || !event.isSpecialKey());
if(isValidKey === true) {
grid.getStore().filter(new Ext.util.Filter({
anyMatch: true,
disableOnEmpty: true,
property: field.up('gridcolumn').dataIndex,
value : field.getValue()
}));
grid.getSelectionModel().select(0);
}
},
buffer: 250
}
这里我创建了一个示例,它使用正则表达式对网格的所有列进行过滤。
https://fiddle.sencha.com/#fiddle/un7
控制器的一部分代码(MainController):
filterStore: function(searchValue) {
var me = this,
grid = me.getMainGrid(),
store = grid.getStore(),
regex = RegExp(searchValue, 'i');
store.clearFilter(true);
store.filter(new Ext.util.Filter({
filterFn: function(record) {
var match = false;
Ext.Object.each(record.data, function(property, value) {
match = match || regex.test(String(value));
});
return match;
}
}));
}
答案 1 :(得分:0)
我用正则表达式解决了它。 如果有人想要使用数组和值来过滤2列上的网格,请按以下步骤操作:
grid.store.load().filterBy(function(record, id){
var re = new RegExp("/(^"+newValue+" )", 'i');
if(Ext.Array.indexOf(filter, record.get("type")) !== -1 && record.get("name").match(re) !== -1){
debugger;
return record;
}
}, this);