过滤组合框不适用于常见的商店组合

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';
         );

【讨论】:

以上是关于过滤组合框不适用于常见的商店组合的主要内容,如果未能解决你的问题,请参考以下文章

组合框级联效果不适用于不同的行

ExtJS 组合框和过滤存储

acNewRec 不适用于组合框 NotInList

WPF 双向绑定不适用于组合框中的复选框

在 ExtJs 中本地过滤组合框远程存储

更新取消事件之前的 MS Access 不适用于未绑定的组合框