Конфигурация экземпляра Tom Select формируется в момент инициализации и передаётся вторым аргументом конструктора. Именно этот объект определяет поведение компонента: источники данных, правила отображения, поиск, создание новых значений и взаимодействие с DOM.
const select = new TomSelect('#select', {
maxItems: 5,
create: true,
placeholder: 'Выбор значения'
});
Каждое поле конфигурации представляет собой отдельный механизм управления внутренними процессами: от построения списка до обработки пользовательского ввода и загрузки данных.
Tom Select формирует итоговую конфигурацию через последовательное объединение нескольких уровней:
Конфликты разрешаются по принципу переопределения: более специфичный уровень перекрывает общий.
TomSelect.define('custom_defaults', {
maxItems: 3
});
new TomSelect('#select', {
maxItems: 10
});
В результате итоговое значение maxItems будет равно 10,
поскольку локальная конфигурация имеет более высокий приоритет.
Параметр maxItems определяет количество допустимых
выбранных значений. При достижении лимита ввод новых элементов
блокируется.
new TomSelect('#select', {
maxItems: 1
});
При значении null или undefined ограничение
отсутствует, допускается множественный выбор без верхней границы.
Параметр create управляет возможностью добавления
пользовательских значений, отсутствующих в исходном списке.
new TomSelect('#select', {
create: true
});
Допускается использование функции, возвращающей объект новой опции:
new TomSelect('#select', {
create: (input) => ({
value: input.toLowerCase(),
text: input
})
});
Функциональный вариант позволяет нормализовать данные до добавления в список.
Конфигурация структуры данных определяется тремя ключевыми параметрами:
valueField — поле, используемое как уникальный
идентификаторlabelField — поле отображаемого текстаsearchField — поля, участвующие в поискеnew TomSelect('#select', {
valueField: 'id',
labelField: 'title',
searchField: ['title', 'description']
});
При работе с объектными источниками данных корректное определение этих параметров критично для корректной индексации и поиска.
Передача массива объектов через параметр options
позволяет полностью контролировать содержимое списка без обращения к
DOM.
new TomSelect('#select', {
options: [
{ id: 1, title: 'JavaScript' },
{ id: 2, title: 'TypeScript' }
]
});
Параметр load определяет функцию получения данных при
вводе текста.
new TomSelect('#select', {
load: function(query, callback) {
fetch(`/api/search?q=${query}`)
.then(res => res.json())
.then(data => callback(data))
.catch(() => callback());
}
});
Callback-ориентированная модель используется для обеспечения совместимости с различными источниками данных.
Поведение загрузки может быть ограничено через
shouldLoad, позволяющий управлять моментом обращения к
серверу.
new TomSelect('#select', {
shouldLoad: (query) => query.length > 2
});
Подобный механизм снижает нагрузку на сервер и предотвращает лишние запросы.
new TomSelect('#select', {
placeholder: 'Поиск элемента'
});
Placeholder отображается до выбора первого значения и при пустом состоянии поля.
new TomSelect('#select', {
maxOptions: 50
});
Параметр ограничивает число элементов, отображаемых в выпадающем списке, предотвращая перегрузку интерфейса.
new TomSelect('#select', {
openOnFocus: true,
closeAfterSelect: true
});
openOnFocus — автоматическое раскрытие при фокусеcloseAfterSelect — закрытие после выбора элементаnew TomSelect('#select', {
sortField: {
field: 'text',
direction: 'asc'
}
});
Сортировка может быть задана строкой или объектом с параметрами направления.
new TomSelect('#select', {
score: function(search) {
return function(item) {
return item.text.toLowerCase().indexOf(search.toLowerCase()) !== -1 ? 1 : 0;
};
}
});
Функция score позволяет полностью переопределить
механику релевантности результатов.
new TomSelect('#select', {
items: ['js', 'ts']
});
Список items задаёт начальное состояние выбранных
элементов.
new TomSelect('#select', {
persist: false
});
При включённом persist новые значения сохраняются внутри
списка опций.
new TomSelect('#select', {
create: true,
persist: false,
duplicates: false
});
Контроль повторного добавления элементов обеспечивает строгую уникальность значений.
new TomSelect('#select', {
render: {
option: function(data, escape) {
return `<div>${escape(data.title)}</div>`;
},
item: function(data, escape) {
return `<div>${escape(data.title)}</div>`;
}
}
});
Объект render управляет HTML-структурой элементов списка
и выбранных значений.
new TomSelect('#select', {
itemClass: 'ts-item',
controlInput: '<input>'
});
Настройка классов позволяет интегрировать компонент в существующие UI-системы.
Конфигурация тесно связана с системой плагинов, где каждый модуль может расширять базовый объект настроек.
new TomSelect('#select', {
plugins: ['remove_button', 'dropdown_input']
});
Каждый плагин способен добавлять собственные параметры:
TomSelect.define('example_plugin', function() {
return {
options: {
customOption: true
}
};
});
При инициализации происходит слияние конфигурации плагина с основной конфигурацией экземпляра.
Некоторые параметры могут быть изменены после инициализации через API экземпляра.
select.settings.maxItems = 10;
select.refreshOptions(false);
Однако изменение конфигурации на лету не всегда приводит к автоматическому пересчёту внутренних структур, поэтому часто требуется вызов методов обновления состояния.
Конфигурация может зависеть от данных DOM-элемента, на котором
инициализируется компонент. Атрибуты data-* могут
использоваться как источник начальных значений, что позволяет
формировать декларативные настройки.
<select id="select" data-placeholder="Выбор языка"></select>
new TomSelect('#select');
В этом случае библиотека извлекает часть параметров автоматически, объединяя их с явно переданными настройками.
Для массового изменения поведения всех экземпляров используется модификация прототипа:
TomSelect.define('global_defaults', {
maxOptions: 100
});
Такой подход влияет на все последующие экземпляры, если не переопределён локально.
Параметры конфигурации напрямую влияют на этапы инициализации:
loadrenderitemsКаждое изменение конфигурации изменяет соответствующий этап жизненного цикла, поэтому корректная настройка параметров определяет стабильность работы компонента в целом.