2015-10-05 212 views
3

我一直在将过滤器应用于商店。过滤器和过滤器

直到最近,我一直在使用'过滤器'方法将多个过滤器添加到商店。我喜欢这种方法,因为我可以使用过滤器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在一起清晰的文档,我提出以下问题:

  1. 是我以前的看法是否准确?
  2. 如果是这样,那么我是否应该避免在同一商店中使用过滤器和过滤器,因为它们看起来并不是一起工作的?
  3. 另一方面,如果过滤器和filterBy旨在一起使用,是他们的一些最佳实践规则?也许一种方法来给过滤器一个ID?

预先感谢所有的反馈,

亲切的问候, Chopo

诗篇。我目前正在使用ExtJs V4.2

回答

1

filter方法的文档说:“默认情况下,传递的过滤器被添加到用于过滤该Store的过滤器集合中。” (http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.Store-method-filter

filterBy方法的文档没有提到过滤器被添加到当前过滤器集合中,所以我想你的观察结果是准确的。

您可以使用Filter类(http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.util.Filter)来显式创建过滤器。然后,您可以使用addFilter(...)removeFilter(...)从商店中添加或删除它们。