Метод evaluate в библиотеке Awesomplete является
центральной точкой механизма обновления списка подсказок. Он отвечает за
пересчёт текущих совпадений, фильтрацию исходного набора данных,
сортировку результатов и обновление UI выпадающего списка
автодополнения.
По сути, evaluate — это внутренний «двигатель»
экземпляра автокомплита, который синхронизирует значение input-поля с
актуальными предложениями и состоянием выпадающего меню.
evaluate вызывается в момент, когда требуется
пересчитать список предложений. Это происходит в нескольких
сценариях:
input.value;evaluate() вручную;Внутри архитектуры Awesomplete метод выполняет роль связующего звена между пользовательским вводом и механизмом отображения списка.
При вызове evaluate происходит последовательная цепочка
операций:
Каждый этап может быть переопределён через настройки экземпляра.
Хотя evaluate не требует входных параметров в
стандартном использовании, логически его можно представить так:
instance.evaluate();
Где instance — экземпляр Awesomplete.
Метод извлекает значение поля ввода:
var input = this.input.value;
Далее строка подготавливается: приводится к единому регистру, обрезаются лишние пробелы, применяются пользовательские преобразования (если заданы).
Awesomplete использует параметр minChars, который
ограничивает ранний запуск поиска:
if (input.length < this.minChars) {
this.close();
return;
}
Если количество символов недостаточно, список принудительно закрывается.
Источник может быть задан как:
В evaluate источник нормализуется к единому формату для
дальнейшей обработки.
Фильтрация — ключевая часть метода. Она определяет, какие элементы попадут в список.
По умолчанию используется простое сопоставление подстроки:
item.toLowerCase().indexOf(input.toLowerCase()) !== -1
Однако Awesomplete позволяет заменить фильтр через
filter:
filter: function(text, input) {
return text.startsWith(input);
}
Внутри evaluate вызывается именно эта логика.
После фильтрации список сортируется через функцию sort
(если она задана).
Типичная логика:
Параметр maxItems ограничивает число отображаемых
элементов:
results = results.slice(0, this.maxItems);
Это предотвращает перегрузку интерфейса и повышает производительность.
После формирования массива результатов evaluate вызывает
рендеринг:
Если есть результаты, список открывается:
this.open();
Если результатов нет — список закрывается:
this.close();
Метод evaluate тесно связан с другими частями API:
open() — отображение списка;close() — скрытие списка;goto() — перемещение активного элемента;select() — выбор элемента;next() / previous() — навигация по
списку.evaluate является триггером, который часто инициирует
последующую работу этих методов.
В стандартной конфигурации Awesomplete привязывает
evaluate к событию input:
this.input.addEventListener("input", function() {
self.evaluate();
});
Таким образом любое изменение поля автоматически пересчитывает подсказки.
var input = document.querySelector("input");
var awesomplete = new Awesomplete(input, {
list: ["Apple", "Banana", "Orange", "Grape", "Kiwi"]
});
// Программный пересчёт подсказок
awesomplete.evaluate();
После вызова метод принудительно пересчитает список даже без пользовательского ввода.
Если список формируется динамически (через функцию),
evaluate может работать с уже обновлёнными данными, что
позволяет интегрировать AJAX-подгрузку.
Многократный вызов evaluate безопасен: он перезаписывает
состояние списка без накопления побочных эффектов.
При больших массивах данных именно evaluate становится
наиболее затратной частью. Оптимизация обычно достигается через:
maxItems;filter;Метод учитывает следующие параметры экземпляра:
minChars — минимальная длина запроса;maxItems — ограничение результатов;filter — функция фильтрации;sort — функция сортировки;autoFirst — автовыбор первого элемента.Каждый из этих параметров влияет на результат работы
evaluate, не требуя изменения самого метода.
Если поле ввода пустое, поведение зависит от конфигурации:
minChars > 0 список закрывается;После завершения evaluate обновляются внутренние
свойства экземпляра:
Эти данные используются другими методами без повторного вычисления.