过滤组合框不适用于常见的商店组合
Posted
技术标签:
【中文标题】过滤组合框不适用于常见的商店组合【英文标题】:Filtering combobox not working for common store combos 【发布时间】:2015-10-25 04:49:34 【问题描述】:我正在使用ExtJS 2.3
。我有 3 个带有以下商店的组合框。
在这里,combo2 和 combo3 共享同一个 store。
以下是组合商店-
Combo1 商店: 副总裁 经理 员工 学生
Combo2 和 Combo3 商店: 作业 会议 工资
现在我的要求是,如果从 Combo1 中选择了“Student”,则应该从 combo2 和 3 中过滤掉“Salary”(不应显示“Salary”选项)
我正在对combo1的更改侦听器执行以下代码-
listeners:
change: function(combo, record, index)
var combo1Val = combo.value; // Give the selected value correctly
this.filterCombo(combo1Val , combo2);
this.filterCombo(combo1Val , combo3);
这是函数体
filterCombo: function (combo1Val , combo)
if (combo1Val == 'Student')
combo.store.filterBy(function (record)
return record.get('text') != 'Salary';
);
else
combo.store.clearFilter();
这里的问题是当我第一次从combo1中选择Student时,'Salary'选项从combo2中消失了。然后,当我展开 combo3 时,它会在那里显示薪水选项,然后再次单击 combo2 时,它再次显示“薪水”选项。不知何故,这个过滤器不起作用。
谁能告诉我这里做错了什么。
【问题讨论】:
不确定 2.3。如果可用,请在展开清除和过滤商店之前使用。 试试小提琴我会帮你解决这个问题 【参考方案1】:你可以在combo2中试试这个
listeners:
expand: function(combo)
combo.store.clearFilter();
if (combo1Val == 'Student')
//filter
【讨论】:
乐于助人 :) 为什么还在 2.3 中 将很快升级:) 我已经发布了我的问题和答案。虽然很好的解决方案!干杯【参考方案2】:虽然 raghavendra 提供的答案是正确的并且效果很好,但是在场景中如果有很多组合(超过两个)需要过滤,我们必须为每个组合编写扩展侦听器。
所以想到在combo1更改事件中的一个地方编写代码。
问题是在输入函数后进入 else 语句,即combo.store.clearFilter();
,因此清除了过滤器。
我通过检查 combo1 更改事件本身而不是每个组合的函数内部的条件解决了我的问题。
listeners:
change: function(combo, record, index)
var combo1Val = combo.value; // Give the selected value correctly
if (combo1Val == 'Student')
this.filterCombo(combo1Val , combo2);
this.filterCombo(combo1Val , combo3);
else
combo2.store.clearFilter();
combo3.store.clearFilter();
filterCombo: function (combo1Val , combo)
combo.store.filterBy(function (record)
return record.get('text') != 'Salary';
);
【讨论】:
以上是关于过滤组合框不适用于常见的商店组合的主要内容,如果未能解决你的问题,请参考以下文章