Автозаполнение текстового поля с DOJO - PullRequest
4 голосов
/ 24 октября 2011

Я ищу простой метод, использующий DOJO для автозаполнения текстового поля. Таблица базы данных, к которой я буду запрашивать (используя PHP-скрипт, возвращаемый в виде JSON), содержит более 100 000 записей, так что это не должно быть в форме FilteringSelect или ComboBox, поскольку я явно не хочу, чтобы пользователь чтобы вернуть весь набор данных, нажав на стрелку вниз.

Другие библиотеки, такие как JQuery и YUI, упрощают эту задачу, но этот конкретный проект основан на DOJO, и я не хочу представлять еще один класс JS.

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Работает!

Даже с 100 000 записей, против которых я опрашиваю. Скорость возврата до 30 мс. Я даже увеличил размер базы данных до 500 000 записей, и скорости автоматического предложения очень приемлемы (все еще меньше 120 мс). Я уверен, что смогу сделать еще лучше с небольшим кэшированием на стороне PHP.

Я использовал QueryReadStore и FilteringSelect . JsonRestStore , вероятно, сработало бы, но я нашел простой рабочий пример с сайта додзё и построил из него.

Вот рабочий код DOJO для текстового поля с автоматическим предложением, попадающего в очень большой набор данных - short and sweet :

            var vendorStore = new dojox.data.QueryReadStore({
                url: "../vms/htdocs/ajax/search.php"
            });

            var vendorSelect = new dijit.form.FilteringSelect({
                name: "vendorSelection",
                store: vendorStore,
                autoComplete: false,
                required: true,
                labelType: "text",
                placeHolder: "Search vendors",
                pageSize: 20,
                hasDownArrow: false,
                style: "width: 175px;",
                searchAttr: "company_name",
                id: "vendorSelect"
            },
            "vendorSelection");

            vendorSelect.startup();

Конечно, вставьте <select id="vendorSelection"></select> где-то в теле страницы. Прекрасно работает.

Еще раз спасибо!

2 голосов
/ 24 октября 2011

Я не знаком с тем, как это делают jQuery или YUI, но ComboBox и FilteringSelect в Dojo имеют свойство pageSize, которое можно использовать для ограничения количества запрашиваемых предметов из магазина за один раз.В раскрывающемся списке вы увидите не более этого количества элементов, сопровождаемое опциями «больше вариантов» и «предыдущий выбор» для просмотра дополнительных вариантов, если это применимо.

Поместите это вместе с хранилищем данныхкоторый запрашивает сервер при каждой выборке (например, dojox.data.QueryReadStore или dojox.data.JsonRestStore) вместо хранилища, которое извлекает все данные заранее (например, dojo.data.ItemFileReadStore), и вы должны иметь возможность делать то, что выхочу.

0 голосов
/ 24 октября 2011

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

...