1

検索/フィルター オプションを備えた ExtJS itemselector を探しています。これのための既存のプラグインまたはそれを実装するためのアイデアはありますか? itemselector は内部的に Multiselect を使用しているため、Multiselect に独自のバージョンを実装する必要がありますか?

4

1 に答える 1

6

multiselect 拡張機能には、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);
    }
}
于 2014-04-02T18:36:29.813 に答える