2014-09-10 2 views
1

У меня возникли проблемы с созданием виджета dijit/form/FilteringSelect. Я подозреваю, что моя комбинация опций просто выключена, но я не могу показаться, что она попала по правильной схеме.Как устранить лаг и исправить частичный поиск совпадений в виджетах FilteringSelect додзё?

Мой источник данных - это список имен книг, и я хотел бы, чтобы пользователь мог использовать этот виджет, либо вытаскивая меню, либо выбрав параметр, либо набрав часть имени и получив совпадение. Трудная часть - это фильтр, который происходит при вводе значения, который должен произойти с совпадением диких карт на обоих концах, потому что вполне вероятно, что введенное слово будет вторым словом в названии.

Моя проблема связана с установкой соответствующей задержки поиска и с тем, что продолжает печатать после того, как поиск произойдет. Во-первых, задержка поиска по умолчанию 200 мс работает нормально, пока вы можете продолжать печатать, но с запросомExpr, установленным на *${0}*, это, кажется, сломано. Когда вы продолжаете вводить текст, вы начинаете с префикса текущего совпадения, а не только того, что вы набрали до сих пор.

Единственный способ, которым я мог бы быть полезным, - это установить гораздо большую задержку (500 мс) и надеяться, что люди не совершают много печатных ошибок. Это имеет нежелательный эффект задержки выпадающего меню.

var books_widget = new FilteringSelect({ 
     placeHolder: "Kitap", 
     store: book_list_store, 
     style: 'width: 12em', 
     searchAttr: "name", 
     autocomplete: false, 
     highlightMatch: 'first', 
     ignoreCase: true, 
     queryExpr: '*${0}*', 
     searchDelay: 500 
    }); 
    books_widget.placeAt(wrapper_node); 

Есть ...

  1. ... любой способ разъединить searchDelay из выпадающего меню запускается с помощью мыши так, что пользовательский интерфейс не имеет бессмысленное отставания?

  2. ... правильный способ упорядочивания таких параметров, чтобы при вводе частичного соответствия функция поиска не уничтожала существующую запись, и вы можете продолжать вводить символы, расширяющие шаблон?

ответ

1

Вам не нужно использовать задержку поиска. Поведение, которое вы получаете, связано с тем, что для свойства autoComplete установлено значение true.
Однако в вашей конфигурации вы используете autocomplete, и вы должны использовать прописную букву «C».

Я полагаю, что это устраняет обе проблемы, так как выпадающее меню больше не будет задерживаться, и когда будет найдено частичное совпадение, оно больше не будет отменять текущий текст.

Свойство searchDelay обычно используется для отладки доступа к магазину (и, возможно, доступа REST). При входе в «привет мир» без задержки поиска, магазин будет запрошен для каждого изменения, так как:

h 
he 
hel 
... 
hello world 

Если вы дребезга его с помощью searchDelay, то он будет иметь доступ только ваш магазин, 500 миллисекунд после последнего изменения, поэтому, если вы набираете достаточно быстро, он будет использовать его только для запроса "hello world".

+0

К сожалению, это неловко. Неудивительно, что это не повлияло на мои настройки! – Caleb

1

Еще одна вещь, которая может уменьшить отставание: предоставить ограниченное количество ответов, которые соответствуют вводимому.

Использование pageSize: «100» в качестве входного параметра даст только первые 100 совпадений, а также ссылку для «большего выбора».

Это действительно помогло производительности при очень большом наборе вариантов во время ввода, чтобы сузить выбор.

+0

Спасибо за подсказку, но в этом случае мой набор данных составляет ровно 66 элементов. Тот факт, что я боролся с отставанием, также был обусловлен ошибкой конфигурации [указана g00glen00b] (http://stackoverflow.com/a/25764333/313192). – Caleb