【问题标题】:Extjs6 Excel like grid filters with storeExtjs6 Excel 像带有商店的网格过滤器
【发布时间】:2017-10-25 10:39:20
【问题描述】:

我正在尝试为网格创建一个复杂的过滤器。我想要以下一般行为:

  • 过滤器的存储与网格不同
  • 在 A 列上应用过滤器
  • 根据我的选择过滤网格
  • B 列中的过滤器将显示可用项目

此外,网格有一个按钮,用于清除所有过滤器等,从过滤器中删除选中的项目。

基于此link,我尝试做类似的事情。我还创建了一个fiddle

关于小提琴,我有一些问题:

1.以下代码返回undefined。根据文档,它应该返回一个 Menu 对象。

business.filter.menu = business.filter.createMenu({
        store: localStore
})

2.当用户按下清除内联过滤器按钮时,我想清除选中的项目。

    var f = Ext.ComponentQuery.query('test-grid')[0].getColumnManager().getHeaderByDataIndex(element).filter;
    if (f.menu) {
        for (var j = 0; j < f.menu.items.length; j++) {
            f.menu.items.items[j].setChecked(false)
        }
    }

在这里,f.menu 始终未定义,因此我无法清除复选框。不知何故,我失去了对菜单的引用。

如何根据我的情况清除复选框?为什么 createMenu 返回 undefined?

编辑

接受的答案适用于这个特定问题(fiddle)

【问题讨论】:

    标签: extjs extjs6 extjs6-classic


    【解决方案1】:

    一般来说: 不要调用方法/使用文档中明确标记为私有的属性。 这通常意味着你做某事的方式是错误的,还有另一种更自动化的方式来实现这一点。 尤其不要拿 Ext4 的例子,将它们 1:1 移植到 Ext5 或 Ext6。 框架在 Ext5 中发生了很大变化,在 Ext6 中变化更多。

    在这种情况下,过滤器菜单应该是从过滤器存储中自动创建的,无需人工干预。 要取消选中菜单项,只需停止按该值过滤即可。

    使用 ColumnManager 查找某个列也是为内部使用而保留的,但我明白您为什么要这样做。这比手动过滤响应表单 getColumns 更容易。

    【讨论】:

    • 关于 ColumnManager,您是对的:以这种方式(经过测试的方式)获取列比手动解析更容易。我想改成手动解析。关于取消选中的菜单项,您建议从过滤器中删除该值,结果将是视图中未选中的 menuItem?
    • Ext5 和 Ext6 中的菜单项将自动取消选中。在 Ext4 中,您必须手动创建菜单项并手动取消选中它们。 --- ColumnManager 是一种简单的方法,但可以随时更改,恕不另行通知。这就是它被标记为私有的原因。应该不再需要访问过滤器本身了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多