过滤组合框不适用于普通商店组合

时间:2015-08-03 07:01:38

标签: javascript extjs filter combobox store

我正在使用ExtJS 2.3。我有3个组合框和以下商店 这里,combo2和combo3共享同一个商店。

以下是组合商店 -

Combo1商店:
副总统 经理
员工
学生

Combo2和Combo3商店:
分配
会议
薪水

现在我的要求是,如果'学生'选自Combo1,' Salary'应该从combo2和3过滤掉(它不应该显示'薪水'选项)

我正在对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选择学生时,'薪水'选项从combo2中消失。然后,当我展开combo3时,它会在那里显示薪水选项,再次点击combo2,再次显示' salary'选项。不知怎的,这个过滤器不起作用。

任何人都可以告诉我这里做错了什么。

2 个答案:

答案 0 :(得分:1)

你可以在combo2中试试这个

listeners: {
    expand: function(combo) {
        combo.store.clearFilter();
        if (combo1Val  ==  'Student') {
            //filter
        }
    }
}

答案 1 :(得分:0)

虽然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';
         });
}