【问题标题】:Extjs4 Combo's and Stores: Remove filter when queryMode=local?Extjs4 组合和商店:当 queryMode=local 时删除过滤器?
【发布时间】:2012-10-09 06:32:56
【问题描述】:

我很沮丧,因为每当我使用它来支持组合字段时,我的商店都会被过滤掉。有什么办法可以禁用它吗?

情景

我有一个带有data 字段的商店;实例化存储时加载的对象数组。我使用这家商店在我的应用程序的不同区域驱动一堆组合。不幸的是,我的组合在商店中应用了过滤器,导致使用同一商店的其他组合稍后仅显示过滤后的值,而不是整个列表。

解决方法

我愚蠢的解决方法是在我完成组合后致电combo.getStore().clearFilter(),但这会很快变老,并且可能会在某个地方引入错误,我敢肯定。

如果我从我的组合配置中删除queryMode:'local',一切都很好,只是现在方便的提前输入功能不再起作用;我只是在下拉列表中显示了一个项目列表,我什至无法浏览我输入的匹配项目的字母。这比普通的 html select 标签更糟糕!

有什么想法吗?

谢谢!

【问题讨论】:

    标签: extjs4 extjs store


    【解决方案1】:

    您不能这样做,因为过滤不是应用于combo,而是应用于store。您可以尝试创建相同 store 的多个实例并使用它。虽然我不知道它是否会起作用。

    Ext.create('combo', {
          //other config
          store : Ext.create('my.store')
    });
    

    如果您将combo 设为不可编辑,它将起作用,因为此时无法应用过滤。但是,正如您所说,您需要提前输入功能,您需要创建 store 的多个实例。

    【讨论】:

      【解决方案2】:

      鉴于组合将在后备存储上添加过滤器,从而影响在我的应用程序中使用该存储的所有组合,我选择向组合类添加覆盖,以便清除组合框被销毁时存储。

      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();
              });
          }
      });
      

      这有点小题大做,但我确实允许指示不要清除过滤器的逃生舱口。

      【讨论】:

        【解决方案3】:

        我发现处理此解决方案的最简单方法是将以下侦听器添加到组合中:

        listeners: {
            beforequery: function(queryPlan){
                queryPlan.query = true;
            }
        }
        

        默认情况下,queryPlan.query 是当前组合字段中用于过滤的文本。将其设置为 false 会取消查询,但将其设置为 true 允许查询在没有过滤值的情况下通过,因此将所有组合字段的所有值保留在下拉列表中。

        【讨论】:

          【解决方案4】:

          ExtJS 4.2 和组合我也遇到过类似的问题。商店一直被过滤,但我不能使用 clearFilter() 因为在那之后组合是不可用的。我的解决方案是这个组合监听器:

          listeners: {
            blur: function(combo) {
              if (combo.queryFilter) {
                combo.queryFilter.setValue('');
                combo.getStore().filter();
              }
            }
          }
          

          【讨论】:

            猜你喜欢
            • 2012-08-08
            • 2014-06-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-25
            • 1970-01-01
            相关资源
            最近更新 更多