Filters通过网格外的复选框/按钮使用“OR”逻辑为单个列提供多个过滤器

时间:2011-09-12 18:41:01

标签: javascript extjs

我已使用FiltersFeature.js插件成功配置了网格面板。我能够在列标题菜单项中看到过滤器选项。我正在使用字符串,列表和日期范围类型,只在本地过滤,而不是远程过滤。

行为按预期工作。例如,我有一个“状态”列,其中配置了一个过滤器(通过配置,而不是列):

filters: [{
  type: 'list',
  dataIndex: 'status',
  options: ['New', 'Waiting', 'Reopened','Working']
}]

正确呈现options属性的每个项目的复选框列表。当我从列表中选择“新建”和“工作”时,网格将被过滤以显示匹配“新”或“工作”状态的记录。

现在,当我以编程方式添加过滤器时使用:

tasksGrid.filters.addFilters([{type: 'string', dataIndex: 'status', value: 'New'}]);
tasksGrid.store.load();

它可以将所有网格记录过滤到匹配状态“新建”。

问题是我无法弄清楚如何向addFilters方法添加多个参数,以获得“OR”搜索的内置行为,而不是“AND”搜索。

当使用标题菜单选择并将多个过滤器应用于单个列时,我可以通过getFilterData()方法看到filterData:

[Object
  data: Object
  type: "list"
  value: Array[2]
    0: "New"
    1: "Waiting"
    length: 2
    __proto__: Array[0]
  __proto__: Object
  field: "status"
  __proto__: Object

其中值设置为2个值的数组。但是,当我尝试做类似的事情时:

tasksGrid.filters.addFilters([{type: 'string', dataIndex: 'status', value: ['New','Waiting']}]);

我得到了filterData的以下结果:

[Object
  data: Object
  type: "string"
  value: "New,Waiting"
  __proto__: Object
  field: "status"
  __proto__: Object

我认为它是连接值,因为我使用了一种字符串,所以我尝试了一种'list',这就是它在filter config中的定义,我得到以下错误:

  

未捕获TypeError:无法调用未定义的方法'on'... ListMenu.js:83

任何帮助都会非常感谢!

谢谢,

赛斯

1 个答案:

答案 0 :(得分:0)

我对你要做的事感到有些困惑。如果你只想设置过滤器的值,你可以使用它我相信:

tasksGrid.filters.getFilter('status').setValue(["New", "Waiting"]);

如果您在创建网格后尝试添加实际过滤器,我查看了ux.ListFilter和ux.ListMenu的文档,看起来您可以使用预先选定的某些过滤器创建它。我将不得不再挖一些代码来创建一个列表过滤器。