这不适用于本地过滤的存储,并且使用一些未记录的功能,因此可能会将您暴露给未来的 API 更改,但您可以访问data
您存储的属性,该属性Ext.util.Collection
确实公开了一个removeFilters
方法。
查看它的实现,您会发现可以通过以下类型的调用删除过滤器:
store.data.removeFilters(col);
// remove all filters at once, because the collection will be updated for each call to removeFilters
store.data.removeFilters([col1, col2]);
之后,您必须手动触发事件以通知绑定到商店的事物:
var data = store.data;
store.fireEvent('filter', store, data, data.getFilters());
store.fireEvent('refresh', store, data);
现在,应用一个新的过滤器集将意味着遍历集合中的所有项目(而不是仅那些已经通过先前过滤器的项目)。因此,除非我遗漏了某些内容,否则移除过滤器而不是例如用全新的设置替换当前设置的过滤器不会给您带来任何性能提升。
您必须注意的是一次应用所需的过滤器更改(无论是通过删除还是添加它们),因为所有过滤器方法都会触发所有项目的传递。
如果我是你,我不会太担心,因为 AFAIK 循环遍历几千个对象应该是一个几乎瞬时的操作,即使在像手机这样的小型处理器上也是如此。