我感到沮丧,因为每当我用它来支持组合时,我的商店都会被过滤掉。有什么方法可以禁用它吗?
情景
我有一个带有data
字段的商店;实例化存储时加载的对象数组。我使用这个商店在我的应用程序的不同区域驱动一堆组合。不幸的是,我的组合在商店中应用过滤器,导致使用同一商店的其他组合仅在以后显示过滤后的值,而不是整个列表。
变通方法
我的愚蠢的解决方法是在完成组合后调用combo.getStore().clearFilter()
,但这会很快变老,并且可能会在某处引入错误,我敢肯定。
如果我从我的组合配置中删除queryMode:'local'
,一切都很好,除了现在方便的预先输入功能不再有效;我只是在下拉列表中显示了一个项目列表,我甚至无法浏览匹配项目的输入字母。这比普通的html select
标签更糟糕!
有什么想法吗?
谢谢!
答案 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