Внутреннее состояние выбранных значений в Tom Select строится вокруг
двух ключевых сущностей: массива выбранных значений (items)
и синхронизации с исходным <select> элементом. Любое
изменение состояния проходит через единый слой API-методов, которые
обеспечивают согласованность UI, DOM и внутренних структур данных.
Выбранные значения не хранятся напрямую в DOM как единственный источник истины. DOM-элемент выступает как отражение состояния, а основная логика сосредоточена внутри экземпляра компонента.
Метод возвращает текущее состояние выбора. Формат результата зависит от конфигурации:
multiple: false возвращается одиночное значение
(строка или число)multiple: true возвращается массив значенийСигнатура:
const value = select.getValue();
Особенности поведения:
itemsВ мультивыборе результат всегда нормализуется в массив, даже если выбран один элемент.
Метод полностью заменяет текущее состояние выбранных элементов.
select.setValue(['a', 'b']);
или для одиночного режима:
select.setValue('a');
Параметр silent управляет генерацией событий:
false (по умолчанию) — вызывает цепочку событий
changetrue — подавляет событияПри вызове выполняются следующие шаги:
items<select>Если значение отсутствует среди доступных опций, оно игнорируется.
Метод добавляет один элемент к текущему набору выбранных значений без полной замены состояния.
select.addItem('new-value');
Используется преимущественно в режиме множественного выбора.
<option selected>Если значение уже присутствует в items, операция
игнорируется.
Удаляет конкретное значение из набора выбранных элементов.
select.removeItem('value-to-remove');
itemsselected у соответствующего
<option>silent)Если значение отсутствует, метод завершает работу без изменений состояния.
Метод сбрасывает все выбранные значения.
select.clear();
itemsselected атрибутовПри мультивыборе метод особенно важен, так как обеспечивает единый механизм сброса без обхода массива вручную.
Метод пересобирает состояние выбранных элементов на основе текущего
набора <option> элементов.
select.refreshItems();
Используется при:
<option> в DOM<option selected>itemsМетод обеспечивает согласованность при внешнем вмешательстве в DOM.
Состояние выбора хранится в виде массива items. Даже при
одиночном выборе используется унифицированная модель, где:
Нормализация выполняется на уровне API, что позволяет избежать различий в обработке UI-логики.
При вызове методов управления значениями происходит каскадная синхронизация:
items<select>Любое изменение инициирует пересборку отображаемого состояния, включая:
Во всех ключевых методах присутствует параметр
silent.
Поддерживаемые методы:
setValue(value, silent)addItem(value, silent)removeItem(value, silent)clear(silent)changeПеред добавлением значения выполняется проверка:
itemsПри несоответствии:
Такая модель предотвращает рассогласование между визуальным состоянием и данными.
В режиме multiple: true управление значениями
приобретает дополнительные особенности:
itemsМетоды addItem и removeItem становятся
основным инструментарием точечного управления состоянием.
Любое изменение значения вызывает единый pipeline:
<select>Даже при минимальных изменениях (например, удаление одного элемента) выполняется полный цикл синхронизации, что гарантирует консистентность.
При изменении выбранных значений автоматически пересчитывается:
Это особенно заметно при использовании addItem во время
открытого dropdown: интерфейс моментально перестраивает видимые
элементы.
Если <select> изменяется напрямую (без API),
состояние может расходиться с внутренним items.
Для восстановления согласованности используется:
refreshItems()Этот метод выступает как механизм ресинхронизации между DOM и внутренней моделью данных.
Система управления значениями в Tom Select построена вокруг нескольких базовых операций:
setValue)addItem)removeItem)clear)refreshItems)getValue)Эти методы формируют единый API-слой, обеспечивающий предсказуемую работу компонента при любых сценариях изменения данных.