создание выражения, которое действует как .содержит

#javascript #extjs

#javascript #extjs

Вопрос:

У меня есть список / хранилище со значениями. Прямо сейчас у меня есть автозаполнение, которое предложит значения, начинающиеся с буквы, которая указана на их клавиатуре. Но то, что мне (думаю) нужно вместо: this.getRawValue() , — это выражение, которое будет показывать все значения, содержащие эту букву, а не только значения, начинающиеся с данной буквы. Итак, если я наберу ‘D’, оно также должно показать имя ‘Sander’, которое не начинается с D, но содержит D.

Это конкретный код:

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

Я знаю, что в javascript есть someString.includes(...) и someString.indexOf(...) .
Но таким образом, мне сначала нужно будет получить someString , что, я думаю, я должен сделать, повторяя хранилище при каждом нажатии клавиши. Есть ли более разумный способ сделать это?

Спасибо

Комментарии:

1. вы пробовали функцию filter ()

Ответ №1:

это старое изменение поля.

Для этого вы можете использовать функцию filter, я использовал ее для проведения временного исследования сетки, но если вы установите фильтр при изменении комбинации, он будет таким же.

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

Комментарии:

1. Что вы проверяете с помощью newValue.match(/s /) и .split(/ s / g)? Я собираюсь попробовать использовать подход с функцией filterFn

2. извините, если значение что-то вроде «имя фамилия», я разделяю его

3. и создайте функцию для сопоставления всех слов, разделенных пробелом

4. Еще раз спасибо. Но что делает это выражение: newValue.match(/s/). Из того, что я выяснил, читая о регулярных выражениях, это означает соответствие любому пробелу? Но я не уверен. Есть ли в нем что-то еще?

5. Нет, s соответствует пробелу, просто если есть пробел, я выполняю разделение с помощью функции filter, в противном случае я выполняю простой фильтр для свойства, голосую как правильный, если ок