2013-04-11 3 views
4

Я не могу найти способ требовать, чтобы вход для выбора фильтрации имел определенную длину. Я пробовал вот так:dijit filteringВыберите с минимальной длиной

new dijit.form.FilteringSelect({ 
    'name': 'bla', 
    'store': jsonRestStore, 
    'searchAttr': "name", 
    'pattern': '.{3,}', 
    'regExp': '.{3,}' 
}); 

но это ничего не меняет. Я хочу, чтобы фильтр выбирал только запрос в хранилище, если было введено не менее 3 символов. Не может быть, что это экзотическое требование, не так ли? За этим хранилищем находятся тысячи предметов, поэтому запрос с 1 или 2 символами медленный.

+0

Просто идея. Возможно, вы можете добавить обработчик событий для 'onChange'. – Jess

ответ

6

Я немного больше искал и нашел this post в списке рассылки dojo. Подводя итог, нет никакой возможности для встроенной поддержки в FilteringSelect для нее, но ее очень легко реализовать.

// custom min input character count to trigger search 
minKeyCount: 3, 

// override search method, count the input length 
_startSearch: function (/*String*/key) { 
    if (!key || key.length < this.minKeyCount) { 
    this.closeDropDown(); 
    return; 
    } 
    this.inherited(arguments); 
} 

Также в API Docs есть атрибут searchDelay, который может быть полезным в минимизирует количество запросов.

searchDelay 
Delay in milliseconds between when user types something and we start searching based on that value 
+0

Не видел, чтобы там. Может быть, обходной вариант, если мой вопрос никуда не уйдет, спасибо. – DanMan

+1

Хорошее решение. Если вы измените «this.inherited (arguments)» на «this.inherited (« _ startSearch », arguments)», вы можете просто пройти мимо того, что вы написали в FilteringSelect, не создавая нового виджета. –

+0

небольшое дополнение: я опустил условие '! Key', потому что в нашем приложении dojo 1.6 оно не позволяло раскрывающемуся списку открываться со стрелкой вниз/щелчком по треугольнику – cypherabe