Tom Select опирается на согласованную модель состояния, объединяющую набор выбранных значений, список доступных опций, активные элементы интерфейса и текущее состояние выпадающего списка. Инспекция состояния в рамках библиотеки позволяет анализировать поведение компонента в реальном времени, диагностировать рассинхронизацию данных и управлять жизненным циклом выбора без обращения к DOM напрямую.
Внутреннее состояние Tom Select можно условно разделить на несколько ключевых блоков:
Каждая из этих сущностей синхронизируется с внутренним состоянием инстанса и может быть получена или косвенно выведена через API.
Основной точкой инспекции является массив выбранных значений:
select.items
Он содержит идентификаторы (или значения), которые были выбраны пользователем или установлены программно. Этот массив является источником истины для состояния выбора.
Синхронно с ним работает метод:
select.getValue()
Он возвращает строку или массив значений (в зависимости от
конфигурации multiple), нормализованный для внешнего
использования.
Ключевая особенность:
items — внутренний форматgetValue() — внешний форматСписок всех опций хранится в объекте:
select.options
Структура представляет собой словарь:
{
"value1": { value: "value1", text: "Label 1" },
"value2": { value: "value2", text: "Label 2" }
}
Инспекция options используется для:
Дополнительно применяется метод:
select.refreshOptions()
который пересобирает внутренний индекс опций и пересчитывает отображаемые результаты.
Состояние выпадающего списка определяется флагом:
select.isOpen
и управляется методами:
select.open()
select.close()
При инспекции важно учитывать не только флаг, но и DOM-состояние:
dropdown-activeselect.dropdownНесоответствие между isOpen и фактическим DOM часто
указывает на неконсистентность UI после кастомных манипуляций.
Основной элемент управления доступен через:
select.control
Он представляет собой input или contenteditable-узел, в зависимости от конфигурации.
Инспекция включает проверку:
disabled, readonly)Пример анализа:
select.control.value
select.control.disabled
select.control.readOnly
Эти свойства влияют на поведение фильтрации и доступность ввода.
Tom Select поддерживает концепцию активного элемента внутри списка результатов:
Состояние можно косвенно определить через DOM:
activedata-selectableХотя явного публичного API для active item может не быть, состояние можно отслеживать через:
select.dropdown.querySelector('.active')
После ввода текста формируется набор:
select.currentResults
Он зависит от:
score() или кастомного searchsortFieldИнспекция currentResults позволяет определить:
Tom Select реагирует на изменения через ряд методов:
select.addItem(value)
select.removeItem(value)
select.setValue(values)
select.clear()
Инспекция после вызова этих методов включает проверку согласованности:
items должен совпадать с UIoptions должен содержать все выбранные значенияОсобенно важно учитывать setValue(), так как он может
вызывать полную пересборку состояния:
select.setValue(["a", "b"], true)
Флаг silent влияет на генерацию событий и может скрывать промежуточные состояния.
Состояние также может быть реконструировано через события:
changeitem_additem_removedropdown_opendropdown_closetypeКаждое событие содержит информацию, полезную для инспекции:
select.on('item_add', (value) => {
// текущее состояние items уже обновлено
})
События позволяют отследить временную эволюцию состояния и выявить гонки обновлений.
Поле ввода формирует отдельный слой состояния:
select.lastQuery
select.inputValue
Оно влияет на:
Инспекция этого слоя важна при кастомных поисковых алгоритмах и асинхронной загрузке данных.
Состояние компонента может быть изменено через:
select.disable()
select.enable()
или через свойства:
select.isDisabled
При инспекции учитываются:
Также важно учитывать взаимодействие disabled с уже
выбранными items: они остаются в состоянии, но становятся не
редактируемыми.
Инспекция состояния в сложных сценариях включает проверку согласованности:
items ⟷ DOM selected nodesoptions ⟷ rendered dropdown itemscurrentResults ⟷ фильтрованный списокcontrol.value ⟷ отображаемый текстisOpen ⟷ состояние dropdownТиповые расхождения возникают при:
setValueДоступ к полному состоянию возможен через объект инстанса:
const select = new TomSelect("#select");
Все ключевые поля становятся доступны как свойства объекта, включая
приватные поля, начинающиеся с _, которые отражают
внутреннюю машину состояния:
_activeItems_renderCache_dropdown_controlInputИспользование этих полей позволяет проводить глубокую инспекцию, но они не гарантируют стабильность между версиями библиотеки.
При комплексной диагностике используется подход, при котором состояние рассматривается как единый граф:
Любое несоответствие между этими слоями указывает на нарушение синхронизации, которое проявляется в UI-дефектах: дублировании значений, исчезновении опций, невозможности удалить элементы или некорректной фильтрации.