如何在ExtJS网格中重置所有过滤器?

8

如何重置ExtJS中网格的筛选器,更具体地说,如何使标题栏遵循对筛选的更改。

即:这样可以正常工作:

grid.store.clearFilter();

但是标题的渲染全部出错了。我需要进入所有菜单对象并取消选择复选框。

我有些迷失了。我相当确定这会给我filterItems:

var filterItems = grid.filters.filters.items;

从这些筛选项中,可以按如下方式获取菜单项:

var menuItems = filter.menu.items;

但这是我能做到的最好了。我期望菜单项内有一种复选框对象,然后我可以取消选中该复选框,希望标题渲染会随之改变。

更新:

现在我有了这段代码。网格存储已清除其过滤器。接下来,我从grid.filters.filters.items获取filterItems并对它们进行迭代。然后我对每个菜单项调用一个函数。

    grid.store.clearFilter();

    var filterItems = grid.filters.filters.items;

    for (var i = 0; i<filterItems.length; i++){

        var filter = filterItems[i];

        filter.menu.items.each(function(checkbox) {

            if (checkbox.setChecked)
                checkbox.setChecked(false, true);
        });
    }

复选框确实被调用了,但仍然没有任何变化 :(
3个回答

16

尝试这段代码:

grid.filters.clearFilters();

这应该能够同时处理网格和其底层存储。

当你执行

 grid.store.clearFilter();

它只能清除存储上的过滤器,但是该调用不会更新网格视图。因此,为了自动处理网格视图以及网格存储的内容,请使用

grid.filters.clearFilters();

希望这可以帮助到您!

祝好!


1
很高兴能提供任何帮助!干杯! - Mohammad Aftab Uddin
2
在我的情况下,grid.filters是未定义的!请帮我找到替代方法。 我的Ext版本是6.5.1。 - Jenish Zinzuvadiya

2

您的更新对我有所帮助,但是您忘记了输入文本而不是复选框的情况。

因此,这是我对您解决方案的补充:

  grid.filters.clearFilters();

    var filterItems = grid.filters.filters.items;

    for (var i = 0; i<filterItems.length; i++){

        var filter = filterItems[i];

        filter.menu.items.each(function(element) {

            if (element.setChecked) {
                element.setChecked(false, true);
            }

            if(typeof element.getValue !== "undefined" && element.getValue() !== "") {
                element.setValue("");
            }                    
        });
    }

1
当您使用带有gridfilters插件的网格,并调用时,

grid.filters.clearFilters();

它重置了应用的过滤器,但是它没有清除菜单内文本字段中的值。
要清除文本字段中的文本,您可以尝试以下操作:
 grid.filters.clearFilters();
 const plugin = grid.getPlugin('gridfilters');
 let activeFilter;
 if('activeFilterMenuItem' in plugin) {
        activeFilter = plugin.activeFilterMenuItem.activeFilter
  }
 if (activeFilter && activeFilter.type === "string") {
       activeFilter.setValue("");
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接