Привязка атрибутов (attribute binding) является ключевым механизмом работы Slim.js, позволяющим синхронизировать состояние модели с DOM. Она обеспечивает автоматическое обновление элементов интерфейса при изменении данных и уменьшает необходимость ручного управления состоянием.
В Slim.js привязка атрибутов осуществляется через директиву
sl-bind, которая позволяет связывать значение свойства
компонента с конкретным атрибутом HTML-элемента. Синтаксис выглядит
следующим образом:
<input sl-bind="value: username">
В данном примере атрибут value элемента
<input> привязан к свойству username
компонента. Любое изменение username автоматически обновит
значение поля ввода.
Особенности:
value,
src, href), так и кастомные
(data-*).Slim.observable.Slim.js позволяет одновременно привязывать несколько атрибутов к разным свойствам:
<img sl-bind="src: userAvatar, alt: userName">
Здесь src изменяется при обновлении
userAvatar, а alt — при изменении
userName. Такая синхронизация избавляет от необходимости
писать дополнительные обработчики для каждого атрибута.
Для сложных сценариев возможна привязка вычисляемых значений через функции:
<div sl-bind="title: () => `${firstName} ${lastName}`">
</div>
Функция автоматически пересчитывается при изменении любых зависимых
свойств (firstName, lastName) и обновляет
атрибут title. Slim.js использует систему слежения за
зависимостями, что делает вычисляемые атрибуты эффективными.
Иногда требуется динамически добавлять или удалять атрибуты. Для этого используется тернарный оператор или булева логика:
<button sl-bind="disabled: !isActive">Отправить</button>
Если isActive равно false, атрибут
disabled будет добавлен к кнопке, блокируя её. При
изменении isActive атрибут автоматически удаляется.
Slim.js поддерживает работу с кастомными атрибутами и
data-*:
<div sl-bind="data-status: status"></div>
Любое изменение свойства status обновляет
соответствующий data-status в DOM, что позволяет
использовать привязку для хранения состояния, не влияя на стандартные
атрибуты.
В компонентах Slim.js привязка атрибутов часто комбинируется с событиями:
class UserProfile extends Slim {
constructor() {
super();
this.username = 'Alice';
this.avatar = 'avatar.png';
}
get template() {
return `
<div>
<input sl-bind="value: username" sl-on="input: updateUsername">
<img sl-bind="src: avatar, alt: username">
</div>
`;
}
updateUsername(event) {
this.username = event.target.value;
}
}
customElements.define('user-profile', UserProfile);
В этом примере поле ввода и изображение аватара связаны с состоянием
компонента. Любое изменение username обновляет
value в <input> и alt у
<img> одновременно.
Slim.js использует делегирование обновлений и минимизацию операций с DOM:
Slim.observable, что позволяет автоматически отслеживать
изменения вложенных свойств.Для контроля формата значения можно использовать модификаторы:
<input sl-bind="value: username | uppercase">
Модификатор uppercase преобразует значение перед
отображением в DOM. Slim.js позволяет создавать собственные
модификаторы, что расширяет возможности привязки атрибутов.
Привязка атрибутов в Slim.js — мощный инструмент для синхронизации состояния модели с интерфейсом. Она поддерживает:
data-* атрибуты.Использование этой функциональности позволяет создавать высокоэффективные, динамичные компоненты с минимальным количеством ручного кода.