Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 过滤器与过滤器比_Javascript_Extjs_Extjs4.2 - Fatal编程技术网

Javascript 过滤器与过滤器比

Javascript 过滤器与过滤器比,javascript,extjs,extjs4.2,Javascript,Extjs,Extjs4.2,我一直在为一家商店应用过滤器 直到最近,我一直在使用“filter”方法向一个商店添加多个过滤器。我喜欢这种方法,因为我可以对一个存储应用多个过滤器,并使用过滤器ID跟踪/删除过滤器: 例如: 示例存储: storeId: 'members', fields: [ { name: 'M_NAME' }, { name: 'COUNTRY' }, { name: 'GROUP' } ] 我可以将几个过滤器组合在一起,按国家和集团进行过滤,例如: stores.me

我一直在为一家商店应用过滤器

直到最近,我一直在使用“filter”方法向一个商店添加多个过滤器。我喜欢这种方法,因为我可以对一个存储应用多个过滤器,并使用过滤器ID跟踪/删除过滤器:

例如:

示例存储:

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的清晰文档,我提出以下问题:

  • 我以前的观察准确吗
  • 如果是这样的话,我是否应该简单地避免在同一家商店中同时使用filter和filterBy,因为它们似乎不是为协同工作而设计的
  • 另一方面,如果filter和filterBy打算一起使用,它们是否有一些最佳实践规则?也许是给一个清洁工身份证的方法
  • 提前感谢所有反馈

    亲切问候,, 乔波


    另外,我目前正在使用ExtJs V4.2

    过滤器方法的文档说:“默认情况下,通过的过滤器添加到用于过滤此存储的过滤器集合中。”。()


    filterBy
    方法的文档没有说明过滤器被添加到当前过滤器集合中,因此我猜您的观察结果是准确的

    您可以使用
    过滤器
    类()显式创建过滤器。然后,您可以使用
    addFilter(…)
    removeFilter(…)
    从存储中添加或删除它们