Tom Select построен вокруг событийной модели, в которой каждый этап взаимодействия с компонентом отражается через дискретные события. Это позволяет перехватывать изменения состояния, управлять поведением выпадающего списка, синхронизировать данные с внешними источниками и реализовывать сложную бизнес-логику без модификации ядра библиотеки.
События в Tom Select делятся на несколько категорий: жизненный цикл компонента, работа с выбранными элементами, управление списком опций, ввод и поиск, а также взаимодействие с интерфейсом.
Для работы с событиями используется стандартный API экземпляра:
on(event, handler) — регистрация обработчикаoff(event, handler) — удаление обработчикаtrigger(event, ...) — вызов события (внутренний
механизм библиотеки и расширений)Обработчики получают контекст экземпляра и набор аргументов, специфичных для конкретного события.
Типовая структура:
const ts = new TomSelect('#select');
ts.on('change', value => {
console.log(value);
});
Событийная система построена таким образом, что большинство операций внутри библиотеки сопровождаются цепочкой триггеров, что позволяет отслеживать даже внутренние изменения состояния.
Срабатывает после полной инициализации экземпляра, когда DOM-структуры построены, данные загружены и компонент готов к взаимодействию.
Характерные особенности:
Активируется при получении фокуса полем ввода.
Событие отражает переход компонента в активное состояние:
Срабатывает при потере фокуса.
Особенности:
Генерируется при открытии выпадающего списка.
Событие отражает момент:
Срабатывает при закрытии выпадающего списка.
Отражает завершение пользовательского взаимодействия с панелью выбора.
Вызывается при уничтожении экземпляра компонента.
Событие сопровождается:
Ключевое событие изменения значения.
Срабатывает при:
Передаёт актуальное состояние выбранных значений.
Генерируется при добавлении нового выбранного элемента.
Аргументы обычно включают:
Используется для отслеживания пополнения списка выбранных значений.
Срабатывает при удалении элемента из выбранных значений.
Отражает момент:
Активируется при выборе конкретного элемента из списка.
Используется в сценариях:
Событие снятия выбора с ранее активного элемента.
Отражает переход элемента из состояния “выбран” в “не выбран”.
Срабатывает при полном очищении выбранных значений.
Используется при:
Генерируется при добавлении новой опции в список.
Характерно для динамических сценариев:
Срабатывает при удалении опции из списка доступных значений.
Отражает синхронизацию с источником данных.
Вызывается при добавлении новой группы опций.
Используется при структурировании данных по категориям.
Событие удаления группы опций вместе с её содержимым.
Срабатывает при вводе текста в поле поиска.
Фиксирует:
Используется для реализации кастомного поиска и фильтрации.
Генерируется в процессе выполнения поиска по опциям.
Отражает момент обработки строки поиска и применения фильтрации.
Срабатывает при успешной загрузке данных из внешнего источника.
Используется в асинхронных режимах работы:
Генерируется при ошибке загрузки данных.
Содержит информацию о сбое:
Активируется при попытке создания нового значения, отсутствующего в списке опций.
Отражает сценарий:
Срабатывает после успешного создания нового элемента и его добавления в список выбранных значений.
Помимо базового жизненного цикла, эти события часто используются для:
Дополнительно применяются для:
Некоторые события используются внутри плагинов и расширений Tom Select и не всегда документируются как публичные:
Такие события позволяют расширять базовое поведение без изменения ядра, обеспечивая модульность архитектуры.
Многие действия в Tom Select формируют последовательности:
type → search → обновление
спискаitem_add →
changecreate → option_add →
item_add → changeclear → changeТакая структура обеспечивает предсказуемость состояния и позволяет точно отслеживать каждое изменение внутри компонента.
Каждое событие выполняется в контексте экземпляра компонента. Это означает доступ к:
Контекст обеспечивает возможность модификации поведения без необходимости внешнего хранения состояния.
Система допускает множественные обработчики на одно событие. Порядок выполнения определяется порядком регистрации.
Ключевые особенности:
Все события Tom Select тесно связаны с внутренним состоянием:
Такая модель исключает рассинхронизацию между отображением и фактическим состоянием компонента.