Extjs4 Combo和Stores:在queryMode = local时删除过滤器?

时间:2012-10-18 17:56:41

标签: extjs4 extjs store

我感到沮丧,因为每当我用它来支持组合时,我的商店都会被过滤掉。有什么方法可以禁用它吗?

情景

我有一个带有data字段的商店;实例化存储时加载的对象数组。我使用这个商店在我的应用程序的不同区域驱动一堆组合。不幸的是,我的组合在商店中应用过滤器,导致使用同一商店的其他组合仅在以后显示过滤后的值,而不是整个列表。

变通方法

我的愚蠢的解决方法是在完成组合后调用combo.getStore().clearFilter(),但这会很快变老,并且可能会在某处引入错误,我敢肯定。

如果我从我的组合配置中删除queryMode:'local',一切都很好,除了现在方便的预先输入功能不再有效;我只是在下拉列表中显示了一个项目列表,我甚至无法浏览匹配项目的输入字母。这比普通的html select标签更糟糕!

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:2)

您不能这样做,因为过滤不是应用于combo,而是应用于store。您可以尝试创建同一store的多个实例并使用它。虽然我不知道它是否会奏效。

Ext.create('combo', {
      //other config
      store : Ext.create('my.store')
});

如果您使combo不可编辑,那么它将起作用,因为之后无法应用过滤。但是,正如您所说,您需要提前输入功能,您需要创建store的多个实例。

答案 1 :(得分:1)

鉴于组合将在后备存储上添加过滤器,因此会影响在我的应用程序中使用存储的所有组合,我选择向组合类添加一个覆盖,以便它清除过滤器上的过滤器组合框被销毁时存储。

Ext.define('MAP.override.Combo', {
    override : 'Ext.form.field.ComboBox',
    initComponent : function()
    {
        this.callParent(arguments);

        this.on('beforedestroy',function(combo){
            if(combo.leaveFilter === true) return;

            console.log('clearing filter on store');
            combo.getStore().clearFilter();
        });
    }
});

这有点像黑客攻击,但我确实允许表示不要清除过滤器的逃生舱。

答案 2 :(得分:0)

我找到处理此解决方案的最简单方法是将以下侦听器添加到组合中:

listeners: {
    beforequery: function(queryPlan){
        queryPlan.query = true;
    }
}

默认情况下,queryPlan.query是当前在组合字段中用于过滤的文本。将其设置为false会取消查询,但将其设置为true可使查询无需过滤值,因此可以将所有值保留在所有组合字段的下拉列表中。

答案 3 :(得分:0)

我与ExtJS 4.2和组合有类似的问题。商店一直被过滤,但我无法使用clearFilter(),因为之后该组合无法使用。我的解决方案是有效的,是这个组合的听众:

INSERT INTO BPO (DinY, M, S, X) VALUES