Как вы этого добьетесь:
Вы можете сделать что-то подобное, передав функцию в опцию source
автозаполнения. В рамках этой функции вы выполняете некоторую логику, чтобы определить, нужно ли вам использовать вызов AJAX или просто отфильтровать данные на стороне клиента:
$("#tags").autocomplete({
source: function(request, response) {
// This is how autocomplete finds matching results by default:
var results = $.ui.autocomplete.filter(common, request.term);
if (results.length < 5) {
// Perform an ajax call.
// In the success method, call response(results)
} else {
response(results);
}
}
});
Обе ваши идеи "гибридного" автозаполнения с использованием двух источников были интригующими. Однако во время тестирования решения я столкнулся с потенциальной проблемой юзабилити. Обычно с этим типом управления вы ожидаете получить меньше результатов при вводе.
Например: допустим, ваш локальный исходный массив выглядит так:
['jquery', 'jquery-ui', 'jquery-ajax', 'jquery-plugins']
И вы используете стратегию показа большего количества результатов, например, после ввода 5 символов. После того, как пользователь введет j-q-u-e-r-y
, ввод y
вызовет вызов AJAX, заполняя список дополнительными результатами, что может быть непросто для пользователя в зависимости от вашего варианта использования.
Пример: http://jsfiddle.net/andrewwhitaker/wSBa3/
Я думаю, что это становится лучше, когда вы устанавливаете некоторое ограничение на количество результатов, которые могут возвращаться с сервера. Если вы синхронизируете это значение с минимальным количеством результатов до того, как произойдет вызов AJAX, взаимодействие не будет таким уж и веселым. Фактически, этот пример делает концепцию более правдоподобной для меня:
Пример: http://jsfiddle.net/andrewwhitaker/NxELC/
<ч />
Это того стоит?
Это сэкономит время загрузки или просто будет головной болью?
Может и то и другое!
Я думаю, что это действительно зависит от того, насколько ресурсоемким является запрос, какой объем данных мы говорим, а также от того, насколько приемлемым может быть подобное решение. Я не могу спекулировать на первых двух вариантах, но я бы сказал, что вы можете столкнуться с проблемой обслуживания с поддержкой двух списков. Эта проблема зависит от того, какую серверную технологию вы используете. Я думаю, если бы вы сделали это правильно, у вас не возникло бы никаких проблем.
Заранее извиняюсь за длинный ответ, но я надеюсь, что это поможет.