ExtJS itemselector с опцией поиска / фильтрации

Я ищу ExtJS itemselector с опцией поиска / фильтрации. Есть ли существующий плагин для этого или какие-либо идеи для его реализации? Поскольку itemselector внутренне использует Multiselect, нужно ли реализовывать свою собственную версию на Multiselect?

1 ответ

Решение

Расширение multiselect имеет опцию для настройки свойства tbar (Top bar). Я использовал следующий код для настройки "toField" itemselector:

 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);
    }
}
Другие вопросы по тегам