5

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

情景

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

解决方法

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

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

有任何想法吗?

谢谢!

4

4 回答 4

2

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

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

如果您将其combo设为不可编辑,它将起作用,因为那时无法应用过滤。但是,正如您所说,您需要提前输入功能,您需要创建store.

于 2012-10-18T18:04:10.760 回答
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();
        });
    }
});

这有点小技巧,但我确实允许指示不清除过滤器的逃生舱口。

于 2012-10-18T21:17:42.367 回答
0

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

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

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

于 2014-05-21T17:08:34.387 回答
0

我对 ExtJS 4.2 和组合也有类似的问题。商店一直被过滤,但我不能使用 clearFilter() 因为在那之后组合是不可用的。我的解决方案是这个组合监听器:

listeners: {
  blur: function(combo) {
    if (combo.queryFilter) {
      combo.queryFilter.setValue('');
      combo.getStore().filter();
    }
  }
}
于 2016-02-24T15:25:03.763 回答