В Slim Select данные представляют собой абстракцию над стандартным
HTML <select> элементом. Библиотека поддерживает
несколько форматов входных данных, каждый из которых трансформируется во
внутреннюю структуру с унифицированными полями. Ключевая концепция
заключается в том, что любой вариант данных сводится к сущностям с
минимум двумя атрибутами: value и text.
Внутренне Slim Select оперирует нормализованным списком опций, где каждая запись имеет стабильную структуру:
value — уникальный идентификатор значенияtext — отображаемый текстdisabled — состояние доступностиЭта модель обеспечивает единообразие независимо от того, в каком виде данные были переданы изначально.
Наиболее простой способ передачи данных — массив строк. В этом случае
строка одновременно используется и как value, и как
text.
new SlimSelect({
select: '#example',
data: ['Apple', 'Banana', 'Orange']
});
Внутренне это преобразуется в:
[
{ value: 'Apple', text: 'Apple' },
{ value: 'Banana', text: 'Banana' },
{ value: 'Orange', text: 'Orange' }
]
Особенности:
Основной и наиболее гибкий формат — массив объектов. Каждый объект описывает опцию явно.
new SlimSelect({
select: '#example',
data: [
{ value: '1', text: 'Apple' },
{ value: '2', text: 'Banana' },
{ value: '3', text: 'Orange' }
]
});
Допустимые поля:
value — обязательное поле идентификацииtext — отображаемая строкаdisabled — блокировка выбораПример с расширенными данными:
data: [
{ value: '1', text: 'Apple', disabled: false, color: 'red' },
{ value: '2', text: 'Banana', disabled: true, category: 'fruit' }
]
Slim Select сохраняет дополнительные поля внутри объекта опции, что позволяет использовать их в кастомных рендерах и логике обработки событий.
Поддержка групп реализуется через вложенную структуру. Каждая группа имеет заголовок и массив дочерних элементов.
new SlimSelect({
select: '#example',
data: [
{
label: 'Fruits',
options: [
{ value: 'apple', text: 'Apple' },
{ value: 'banana', text: 'Banana' }
]
},
{
label: 'Vegetables',
options: [
{ value: 'carrot', text: 'Carrot' },
{ value: 'potato', text: 'Potato' }
]
}
]
});
Структура групп:
label — название группыoptions — массив опцийОсобенности обработки:
valueoptionsПри включении режима multiple структура данных не
изменяется, но изменяется характер хранения выбранных значений.
new SlimSelect({
select: '#example',
data: [
{ value: '1', text: 'Apple' },
{ value: '2', text: 'Banana' }
],
settings: {
multiple: true
}
});
В этом режиме:
valueПример результата выбора:
['1', '2']
Slim Select синхронизирует данные с атрибутами HTML
<option selected> либо с параметром
value.
HTML-вариант:
<select id="example">
<option value="1">Apple</option>
<option value="2" selected>Banana</option>
</select>
При инициализации:
new SlimSelect({
select: '#example'
});
Если данные задаются через data, предвыбор
осуществляется явно через совпадение value.
data: [
{ value: '1', text: 'Apple' },
{ value: '2', text: 'Banana' }
],
settings: {
selected: ['2']
}
Slim Select позволяет полностью заменять набор данных после инициализации. Это критично для интерфейсов с фильтрацией и зависимыми списками.
const slim = new SlimSelect({
select: '#example',
data: [
{ value: '1', text: 'Apple' }
]
});
slim.setData([
{ value: '2', text: 'Banana' },
{ value: '3', text: 'Orange' }
]);
При обновлении:
Slim Select не навязывает встроенный API загрузки, но поддерживает
интеграцию с асинхронными источниками через ручное обновление
data.
Типичный сценарий:
const slim = new SlimSelect({
select: '#example',
data: []
});
fetch('/api/fruits')
.then(res => res.json())
.then(data => {
slim.setData(
data.map(item => ({
value: item.id,
text: item.name
}))
);
});
Особенности:
Каждая опция может содержать произвольные поля, которые не участвуют в отображении, но доступны в логике обработки.
data: [
{
value: '1',
text: 'Apple',
price: 100,
stock: 42,
meta: {
origin: 'Kazakhstan'
}
}
]
Использование:
Slim Select не удаляет и не нормализует неизвестные поля, сохраняя их целиком.
Состояние disabled может задаваться как в HTML, так и в
объектной модели.
data: [
{ value: '1', text: 'Apple', disabled: true },
{ value: '2', text: 'Banana' }
]
Поведение:
Модель данных Slim Select имеет ряд устойчивых ограничений:
value должен быть уникальным в пределах спискаvalue приводят к некорректному поведению
выбораtext приводит к отображению пустых
элементовПри проектировании данных критично учитывать стабильность
идентификаторов, так как именно value используется как ключ
синхронизации между DOM и внутренним состоянием компонента.