【问题标题】:ExtJS: Using gridpanel filter Header ignores/resets the store filter that I addedExtJS:使用网格面板过滤器标题忽略/重置我添加的商店过滤器
【发布时间】:2015-12-19 16:36:47
【问题描述】:

我正在加载我的商店和网格面板并像这样分配一个过滤器

myGrid.store.filter('enabled', 'true');

这是为了过滤掉未启用的记录。这行得通,我的网格面板最初显示所有启用等于 true 的记录。然后,当我使用网格面板标题应用过滤器并搜索我知道已启用设置为 false 的记录时,现在会出现。

初始分配store.filter(....) 后的初始网格面板列表会删除所有未启用等于 true 但使用标头过滤的记录将其包含在新过滤器中。

我在这里关注了文档: http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.ux.grid.FiltersFeature

所以我有这样的东西:

 Ext.apply(me, {
        width: 500,
        height: 250,
        store: 'BlockItems',
        features: [{
            ftype: 'filters',
            local: true,

从标题中删除过滤器后,我再次留下了我的列表,但现在它包括 enabled != trueenabled == true 的记录,即所有记录。

我很困惑。我已经过滤了我的商店,为什么网格“标题过滤器”不符合我最初添加的过滤器?

【问题讨论】:

    标签: javascript extjs extjs4 extjs4.2 extjs5


    【解决方案1】:

    您可以通过创建Ext.util.Filter 的新实例来添加新过滤器,并将它们添加到store 的过滤器中。

    我在select eventgridheader combobox 中有以下代码:

    this.up('grid').getStore().filter(new Ext.util.Filter({
        anyMatch: false,
        disableOnEmpty: true,
        property: field.up('gridcolumn').dataIndex,
        value   : field.getValue()
    }));
    

    这是comboboxkeyup的代码:

    if (Ext.isEmpty(field.getValue()) && isValidKey === true) {
        this.up('grid').getStore().filter(new Ext.util.Filter({
            anyMatch: false,
            disableOnEmpty: true,
            property: field.up('gridcolumn').dataIndex,
            value   : field.getValue()
        }));
    }
    

    这是gridheader textfield的keyup:

    grid.getStore().filter(new Ext.util.Filter({
        anyMatch: true,
        disableOnEmpty: true,
        property: field.up('gridcolumn').dataIndex,
        value   : field.getValue()
    }));
    

    正如您在我的Sencha Fiddle 中看到的那样,它们完美地协同工作

    【讨论】:

    • 太好了,谢谢。你如何捕捉网格标题组合的偶数?你有你的听众吗?你能发布一些代码吗?
    • 一切尽在小提琴中。我创建了一个从组合框扩展的过滤器组合。我在视图中声明的那个 filtercombo。如果您查看 filtercombo,您可以看到我在那里收听事件..
    • 如果我想让它们保持同步怎么办?自定义过滤器和默认框架“gridfilter”插件?想法是我想以编程方式过滤网格并将其反映在“gridfilter”插件中。如果我像你一样存储过滤器,那不会发生。
    【解决方案2】:

    这是设计使然。如果您使用列过滤器,它会从商店中删除所有其他过滤器,因为它不知道您是否要保留它们。

    你有三种可能性。如果您根本不打算显示已禁用的记录,那么最彻底的方法是在商店中仅显示已启用的记录。

    如果您不想这样做,您可以侦听 filterchange 事件并在每次 filterchange 之后添加启用的过滤器(检查它是否已经添加,否则会出现无限循环),或者您可以重新定义每个列过滤器的工作方式,以便它们满足您的特殊需求:

    http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.ux.grid.FiltersFeature-cfg-filters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多