ExtJS - 清除商店过滤器后,类型查询不起作用

ExtJS - After clearing filter(s) of store, type query does not work

我正在为多个用户界面使用 combobox 的实例。因此,当用户关注它时,我需要重置组合框商店。 Combo 的商店本地排序;所以我执行 Ext.data.Store class 的 clearFilter() 函数 - 它按预期工作,除了 键入查询 不再工作。

这是我的组合框配置:

forceSelection: true,
autoSelect: false,
typeAhead: false,
triggerAction: 'all'

店铺配置:

autoLoad: false,
autoSync: false,
remoteSort: false,
proxy: {
    type: 'ajax'
    // other configs
}

编辑: fiddle

注意: comboboxStore 在 fiddle 中使用 静态数据 当原来的使用 AJAX proxy

正如我从您的 fiddle 了解到的,您在对不同的组合框实施过滤器时遇到了麻烦。我认为您目前对组合框使用同一商店的问题。这就是为什么您还应该更改每个组合框的商店。将此代码添加到您的 fiddle.

combo1.getStore().filter('nationality', 'USA');

        container.on('tabchange', function(tabpanel, newCard, oldCard, eOpts) {
            combo2.getStore().clearFilter();
            combo1.getStore().filter('nationality', 'USA');
            if (combo2.getValue()) {
                combo1.getStore().clearFilter();
                combo1.getStore().filter('userId', combo2.getValue())
            }
        });

顺便说一句,由于静态存储,我将过滤器放在 tabchange 事件之前。但是,如果您使用代理(AJAX)存储,您可能想要添加过滤器存储侦听器。像这样:

listeners: {
  load: function(store, records) {
      store.filter('nationality', 'USA');
  }
} 

编辑:

 var store = combo1.getStore();
 store.filter('nationality', 'USA');

            container.on('tabchange', function(tabpanel, newCard, oldCard, eOpts) {
             if (newCard.title == 'Panel 1') {
                store.clearFilter();
                store.filter('nationality', 'USA');
             } else if (newCard.title == 'Panel 2') {
                store.clearFilter(); 
                // Or whatever filter because you have to change the store                         
                // dynamically if you wanna use same store for different combos
             }
        });

希望这对您有所帮助。祝你好运。

我想我通过查看 post 解决了您的问题: ExtJs: Search / Filter within a ComboBox

在组合框的每次击键上添加自定义过滤器似乎可以解决您的问题:

    enableKeyEvents:true,
    listeners: {
     'keyup': function() {
           this.getStore().clearFilter();
           this.getStore().filter('name', this.getRawValue(), true, false);
     },
     'beforequery': function(queryEvent) {
           queryEvent.combo.onLoad();
     }
 }

它不漂亮,但我认为它有效。看看这个扩展 fiddle:

https://fiddle.sencha.com/#fiddle/teg