【问题标题】: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。如果可用,请在展开清除和过滤商店之前使用。
  • 试试小提琴我会帮你解决这个问题

标签: javascript extjs filter combobox store


【解决方案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';
         });
}

【讨论】:

    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 2011-10-04
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    相关资源
    最近更新 更多