Модель состояния Slim Select построена вокруг синхронизации нативного
элемента <select> и внутреннего представления данных
библиотеки. Любое изменение — выбор значения, фильтрация, открытие
списка или программная модификация опций — отражается одновременно в DOM
и в объекте экземпляра Slim Select, что позволяет рассматривать
состояние как единый источник истины.
В основе состояния лежит структура, описывающая текущие опции и
выбранные значения. При инициализации библиотеки формируется кэш данных,
извлечённый из <option> и
<optgroup>.
Каждый экземпляр содержит:
Внутренние структуры не предназначены для прямого изменения, доступ к ним осуществляется через API-инспекцию.
Одним из центральных аспектов инспекции состояния является доступ к текущему выбору. Slim Select предоставляет несколько уровней получения данных, отличающихся по детализации.
Метод getSelected() возвращает массив значений,
соответствующих атрибуту value элементов
<option>.
const ss = new SlimSelect({
select: '#select'
});
const selected = ss.getSelected();
console.log(selected);
Результат:
["1", "3", "7"]
В случае одиночного выбора возвращается массив с одним элементом, что сохраняет единообразие модели.
Метод getSelectedData() предоставляет расширенную
информацию:
const data = ss.getSelectedData();
console.log(data);
Каждый элемент содержит:
value — значение;text — отображаемый текст;selected — флаг выбора;disabled — состояние недоступности;Структура полезна при построении зависимых интерфейсов, где требуется контекст выбранной опции.
Для анализа доступного набора данных используется метод получения полного списка опций.
const options = ss.getData();
console.log(options);
Результирующая структура представляет собой массив объектов, включающих как активные, так и неактивные элементы.
Каждый объект обычно содержит:
{
value: string,
text: string,
selected: boolean,
disabled: boolean
}
При наличии групп (optgroup) структура дополняется
вложенными массивами элементов.
Состояние раскрытия списка управляется внутренним флагом. Инспекция этого состояния осуществляется через API:
ss.isOpen();
Возвращает логическое значение:
true — список раскрыт;false — список скрыт.Открытие и закрытие не только визуальное состояние, но и изменение фокуса, обработчиков клавиатуры и слоя взаимодействия.
Slim Select поддерживает встроенный поиск, состояние которого также подлежит инспекции.
Текущее значение поискового запроса:
ss.search();
Возвращает строку, введённую пользователем в поле фильтрации. При отсутствии активности возвращается пустая строка.
Поисковое состояние влияет на:
Slim Select может быть переведён в неактивное состояние, при котором взаимодействие с компонентом ограничено.
ss.isDisabled();
Возвращает:
true — компонент отключён;false — активен.Блокировка синхронизируется с атрибутом disabled
исходного <select> и может быть изменена программно
или через DOM.
Одной из ключевых особенностей является двусторонняя синхронизация:
<select> отражается в Slim Select;Пример изменения через DOM:
document.querySelector('#select').value = "2";
document.querySelector('#select').dispatchEvent(new Event('change'));
После этого внутреннее состояние обновляется автоматически.
Хотя инспекция состояния предоставляет доступ к текущим данным, динамическое отслеживание реализуется через события.
Основные события:
change — изменение выбора;open — раскрытие списка;close — закрытие списка;search — изменение строки поиска.Пример обработки:
ss.on('change', (info) => {
console.log(info);
});
Объект события обычно содержит:
При включённом режиме multiple модель состояния расширяется:
getSelected() возвращает массив значений;getSelectedData() возвращает массив объектов;Дополнительно учитываются ограничения:
Состояние выбора напрямую зависит от структуры опций. Любое изменение набора опций приводит к пересчёту:
Удаление опции, которая была выбрана, автоматически приводит к её исключению из состояния выбранных значений.
Помимо публичных методов, Slim Select использует ряд внутренних флагов:
_isOpen — состояние выпадающего списка;_data — кэш опций;_selected — текущий выбор;_search — строка поиска.Хотя прямой доступ к ним не предусмотрен, их поведение отражается через публичные методы инспекции.
Состояние поддерживается в строгой консистентности:
Это исключает расхождения между визуальным представлением и данными формы, что особенно важно при сложных динамических интерфейсах с частыми обновлениями опций и зависимыми селектами.