创建一个像.contains一样的表达式

时间:2016-10-24 11:54:39

标签: javascript extjs

我有一个包含值的列表/商店。现在我有自动完成功能,它会建议以键盘上给出的字母开头的值。但我想(而不是)this.getRawValue()是一个表达式,它将显示包含该字母的所有值,而不仅仅是以给定字母开头的值。 因此,如果我键入' D',它还应显示名称' Sander',它不以D开头,但包含D.

这是具体的代码:

this.getStore().filter('NAME', this.getRawValue());

我知道javascript包含someString.includes(...)someString.indexOf(...)。 但是通过这种方式,我首先需要获得someString,我认为我必须通过在每个按键上迭代商店来完成。有更聪明的方法吗?

由于

1 个答案:

答案 0 :(得分:1)

这是一次旧的改变。

你可以使用过滤功能来做到这一点,我用这个来对网格进行银泰研究,但是如果你在组合变化上设置过滤器它会是相同的。

var me=this,
list=me.lookup('listapdv'),
labelSearch=me.lookup('labelSearch'),
labelDelete=me.lookup('labelDelete'),
store=list.getStore();

store.clearFilter(true);
me.lookup('table').refresh();
labelSearch.setVisible(true);
labelDelete.setVisible(false);
if(newValue!==''){
    if(newValue.match(/\s/)){
        var val=newValue.toLowerCase().split(/\s/g);
        store.filter({
            filterFn:function(item){
                var ragsoc=item.get('ragsoc').toLowerCase(),
                    match=[],
                    flag=true;
                val.forEach(function(text,index){
                    if(text!==''){
                        match[index]=(ragsoc.indexOf(text)!==-1)?true:false;
                    }
                });
                match.forEach(function(f,i){
                    if(!f) flag=false;
                });
                return flag;
            }
        });
    }else{
        store.filter([{
            property:'ragsoc',
            value: newValue,
            operator:'like'
        }]);
    }
    labelSearch.setVisible(false);
    labelDelete.setVisible(true);
}
me.lookup('aziendeCount').setText(''+store.data.length);
list.setSelection(store.getAt(0));