【问题标题】:ExtJS itemselector with search/filter option带有搜索/过滤选项的 ExtJS 项目选择器
【发布时间】:2014-05-14 01:29:20
【问题描述】:

我正在寻找带有搜索/过滤选项的 ExtJS 项目选择器。是否有现有的插件或任何想法来实现它?由于 itemselector 内部使用 Multiselect,我是否需要在 Multiselect 上实现自己的版本?

【问题讨论】:

    标签: extjs4 multi-select itemselector


    【解决方案1】:

    多选扩展有一个用于配置 tbar(顶栏)属性的选项。我使用下面的代码来配置itemselector的“toField”:

     tbar : {
                    xtype: 'toolbar',
                    flex: 1,
                    dock: 'top',
                    items: [
                        'Filter:',
                        {
                            xtype: 'textfield', 
                            fieldStyle: 'text-align: left;',                            
                            enableKeyEvents: true,
                            listeners: {
                                scope: this,
                                change : function(field, newValue, oldValue, options) {                                 
                                    var toStore = this.toField.boundList.getStore();                                    
                                    toStore.clearFilter();
                                    if (String(newValue).trim() != "")
                                    {
                                        toStore.filterBy(function(rec, id){
                                            return this.filterFunc(rec, newValue);  
                                        }, this);
                                    }
                                }
                            }
                        }
                    ]
                }
    

    而我的 filterFunc 是:

    filterFunc: function(rec, filter)
    {        
        var value = rec.get(this.displayField);
    
        if (this.filterIgnoreCase) value = value.toLocaleUpperCase();
        if (this.filterIgnoreCase) filter = filter.toLocaleUpperCase();
    
        if (Ext.isEmpty(filter)) return true;
    
        if (this.filterAnyMatch && this.filterWordStart)
        {
            var re_opts = this.filterIgnoreCase ? 'i' : '';
            var re = new RegExp('(^|[\\s\\.!?;"\'\\(\\)\\[\\]\\{\\}])'+Ext.escapeRe(filter), re_opts);
            return re.test(value);
        }
        else if (this.filterAnyMatch)
        {
            var re_opts = this.filterIgnoreCase ? 'i' : '';
            var re = new RegExp(Ext.escapeRe(filter), re_opts);
            return re.test(value);
        }
        else
        {
            var re_opts = this.filterIgnoreCase ? 'i' : '';
            var re = new RegExp('^\s*'+Ext.escapeRe(filter), re_opts);
            return re.test(value);
        }
    }
    

    【讨论】:

    • 这对我来说效果很好,但我不得不稍微修改一下 ItemSelector 代码才能将 tbar 放在那里。有什么我错过的东西可以让您在不修改原始 ux.form.ItemSelector 代码的情况下完成这项工作吗?
    • @codekoala 我不记得我到底做了什么,我已经 8 个月没有使用 ExtJS 了。据我所知,我使用的是 ExtJS 4,我不记得对 ItemSelector 做过任何特殊更改。可能只是它的版本问题。
    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2019-04-06
    • 2020-05-11
    • 2021-03-07
    相关资源
    最近更新 更多