#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, в противном случае я выполняю простой фильтр для свойства, голосую как правильный, если ок