如何重置Extjs网格中的所有过滤器?

时间:2014-07-07 15:15:28

标签: extjs

如何在网格中重置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 个答案:

答案 0 :(得分:15)

试试这段代码:

grid.filters.clearFilters();

这应该处理网格及其底层存储。

当你这样做时

 grid.store.clearFilter();

它只能清除商店中的过滤器,但网格的视图无法通过该调用进行更新。因此,要自动处理网格视图以及网格存储,只需使用

grid.filters.clearFilters();

希望它有所帮助!

干杯!

答案 1 :(得分:0)

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

所以这是我添加的解决方案:

  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("");
            }                    
        });
    }

答案 2 :(得分:0)

使用带有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("");
 }