Javascript 过滤器与过滤器比
我一直在为一家商店应用过滤器 直到最近,我一直在使用“filter”方法向一个商店添加多个过滤器。我喜欢这种方法,因为我可以对一个存储应用多个过滤器,并使用过滤器ID跟踪/删除过滤器: 例如: 示例存储:Javascript 过滤器与过滤器比,javascript,extjs,extjs4.2,Javascript,Extjs,Extjs4.2,我一直在为一家商店应用过滤器 直到最近,我一直在使用“filter”方法向一个商店添加多个过滤器。我喜欢这种方法,因为我可以对一个存储应用多个过滤器,并使用过滤器ID跟踪/删除过滤器: 例如: 示例存储: storeId: 'members', fields: [ { name: 'M_NAME' }, { name: 'COUNTRY' }, { name: 'GROUP' } ] 我可以将几个过滤器组合在一起,按国家和集团进行过滤,例如: stores.me
storeId: 'members',
fields: [
{ name: 'M_NAME' },
{ name: 'COUNTRY' },
{ name: 'GROUP' }
]
我可以将几个过滤器组合在一起,按国家和集团进行过滤,例如:
stores.members.addFilter({
id: 'F_COUNTRY',
property: 'COUNTRY',
exactMatch: true,
value: 'UK'
});
stores.members.addFilter({
id: 'F_GROUP',
property: 'GROUP',
exactMatch: true,
value: 'Developer'
});
到目前为止还不错。我可以看到我有两个过滤器使用:
stores.members.filters.length
使用以下方法移除单个过滤器:
stores.members.removeFilter('filter\u name')
或重载过滤器:
stores.members.addFilter({
id: 'F_COUNTRY',
property: 'COUNTRY',
exactMatch: true,
value: 'France'
});
我可以看到筛选器已被重载为stores.members.filters.length仍将返回相同数量的筛选器和stores.members.filters.getAt(筛选器编号)。id仍将返回'F_COUNTRY',而members.filters.getAt(筛选器编号)。值已从'UK'更改为'France'
最近,我发现需要添加更复杂的过滤器,最好使用filterBy方法来实现。例如:
stores. members.filterBy(function(record){
return (record.get('GROUP'=='Developer') || record.get('GROUP'=='Manager'));
});
现在,我发现只要我应用这个过滤器,所有以前使用“filter”方法设置的过滤器都会被忽略。使用stores.members.filters.getAt(filter_number).id/value和stores.members.filters.length,它们仍然可见,但不使用
使用“filter”和“removeFilter”方法添加、删除或重载过滤器后,使用“filter”方法创建的过滤器将再次变为活动状态,而使用“filterBy”方法创建的过滤器将变为非活动状态
此外,如果我使用“filterBy”方法添加一个新过滤器,这似乎会覆盖以前的过滤器
鉴于我找不到关于同时使用filter和filterBy的清晰文档,我提出以下问题:
另外,我目前正在使用ExtJs V4.2过滤器方法的文档说:“默认情况下,通过的过滤器添加到用于过滤此存储的过滤器集合中。”。()
filterBy
方法的文档没有说明过滤器被添加到当前过滤器集合中,因此我猜您的观察结果是准确的
您可以使用过滤器类()显式创建过滤器。然后,您可以使用addFilter(…)
和removeFilter(…)
从存储中添加或删除它们