从ExtJS中的商店中删除过滤器

时间:2011-09-01 18:58:19

标签: javascript extjs4

我使用Ext.data.Store方法向store.filter(string, string)明确添加过滤器。

但是,我无法弄清楚如何从商店中删除过滤器。因此,即使在使用store.load()重新加载后,过滤器也始终适用。我看到的唯一解决方法是重新启动整个Web应用程序。

如何从Ext.data.Store删除过滤器?

3 个答案:

答案 0 :(得分:31)

除了Mchi的回答之外,我想说可以删除特定过滤器(clearFilter()将其全部删除)。
为此,请使用:

,而不是使用store.filter('property_to_filter','value')方法
store.filters.add('filtersId', new Ext.util.Filter({
  property: 'property_to_filter',
  value: 'value'
}));
store.load();

删除过滤器使用:

store.filters.removeAtKey('filtersId');

更新(适用于> 4.2.0)

在4.2.0中添加/删除特定过滤器的方法:

store.addFilter({
    id: 'filtersId',
    property: 'property_to_filter',
    value: 'value'
});

store.removeFilter('filtersId');

有关详细信息,请查看文档:{​​{3}},Ext.data.Store.addFilter

答案 1 :(得分:14)

您需要clearFilter()

答案 2 :(得分:4)

编辑:我刚刚发现(浏览API以获取其他内容)它更容易。有一个参数(布尔值),如果为true,则在使用remoteFilter时不会重新加载数据...

所以这里是:

store.clearFilter(true);
store.filter(...);

来源:Store API > clearFilter

我简直不敢相信我已经挣扎了这么久。在我查看的每个论坛中,我看到clearFilter对远程过滤没有用,而我所要做的只是添加“true”......

原帖:

  

“你需要clearFilter()

IMO,这绝对不令人满意。 使用服务器后端获取数据(尽可能多),使用remoteSortremoteFilter +分页来管理大型结果集时,它甚至无用。

在重新应用过滤器之前,调用clearFilter()实际上会重新加载数据。因此,每次应用过滤器时都会发送2个a​​jax请求。这已经困扰了很长一段时间。

你所要做的就是:

store.filters.clear(); // Which is what clearFilter() does just before reloading the data...
store.filter(...);