2016-10-24 2 views
0

私は値を持つリスト/ストアを持っています。今私は、キーボード上に与えられた文字で始まる値を示唆するオートコンプリートを持っています。しかし、私が思うものの代わりに:this.getRawValue()は、指定された文字で始まる値だけでなく、その文字を含むすべての値を表示する式です。 だから私は「D」、それはまた、これは、特定のコードであるD..containsのように動作する式を作成する

をDで始まらない名「サンダー」を示しているが、含まれている必要があります入力した場合:私は知っている

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

をそのjavascriptはsomeString.includes(...)someString.indexOf(...)です。 しかし、この方法では、最初にsomeStringを取得する必要があります。これは、それぞれのキー押下でストアを繰り返して行う必要があると思います。これを行うよりスマートな方法はありますか?

ありがとうございます。

+1

(あなたはフィルタ機能を試してみました) –

答えて

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)); 
+0

あなたはnewValue.match(/ \ sの/)をどのようにチェックしていると.split(/ \ sの/ g)で?私はfilterFn関数 –

+1

でアプローチを試してみるつもりです。値が "name surname"のようなものなら、私は –

+1

を分割し、すべての単語を空白から分割して一致させる関数を作成します –