Автозаполнение текстового поля с помощью DOJO

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

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

    Работает!

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

    Я закончил использование QueryReadStore и FilteringSelect . Возможно, JsonRestStore работал, но я нашел простой рабочий пример с сайта dojo и построил его.

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

    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> somwhere в теле страницы. Прекрасно работает.

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

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

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

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