我一直在将过滤器应用于商店。过滤器和过滤器
直到最近,我一直在使用'过滤器'方法将多个过滤器添加到商店。我喜欢这种方法,因为我可以使用过滤器ID应用多个过滤器来存储和跟踪/删除过滤器:
如:
举例店:
storeId: 'members',
fields: [
{ name: 'M_NAME' },
{ name: 'COUNTRY' },
{ name: 'GROUP' }
]
我可以SRING一对夫妇根据国家和组别筛选:
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_NAME')
或超负荷过滤器:
stores.members.addFilter({
id: 'F_COUNTRY',
property: 'COUNTRY',
exactMatch: true,
value: 'France'
});
我可以看到过滤器已被重载,因为stores.members.filters.length仍然会返回相同数量的过滤器,而stores.members.filters.getAt(filter_number).id仍会在成员时返回'F_COUNTRY'。 filters.getAt(filter_number).value已从“UK”更改为“France”。
最近,我发现需要添加更多使用filterBy方法最好实现的复杂过滤器。 E.g:
stores. members.filterBy(function(record){
return (record.get('GROUP'=='Developer') || record.get('GROUP'=='Manager'));
});
现在,我似乎发现的是,当我将此过滤器,是以往所有过滤器使用“过滤器”的方法设置将被忽略。它们仍可通过stores.members.filters.getAt(filter_number).id/value和stores.members.filters.length显示,但未使用。
只要我使用'filter'和'removeFilter'方法添加,删除或重载一个过滤器,使用'filter'方法创建的过滤器就会再次激活,并且使用'filterBy'方法创建的过滤器变为非活动状态。另外,如果我使用'filterBy'方法添加一个新的过滤器,这似乎覆盖了前面的过滤器。
既然我无法找到使用过滤器和filterBy在一起清晰的文档,我提出以下问题:
- 是我以前的看法是否准确?
- 如果是这样,那么我是否应该避免在同一商店中使用过滤器和过滤器,因为它们看起来并不是一起工作的?
- 另一方面,如果过滤器和filterBy旨在一起使用,是他们的一些最佳实践规则?也许一种方法来给过滤器一个ID?
预先感谢所有的反馈,
亲切的问候, Chopo
诗篇。我目前正在使用ExtJs V4.2