Unpoly предоставляет мощный механизм управления слоями (layers), позволяя строить сложные интерфейсы без полной перезагрузки страницы. Слои — это изолированные области DOM, которые можно обновлять, заменять или добавлять динамически. Данные слоев (layer data) позволяют хранить и передавать информацию между слоями, управлять состоянием интерфейса и организовывать динамическое поведение элементов.
Каждый слой имеет уникальный идентификатор layer.id,
который автоматически генерируется или задаётся вручную через атрибут
up-layer. Идентификатор слоя используется для:
up.layer.find(id).Слои образуют иерархическую структуру, где один слой может быть родителем для нескольких вложенных слоев. Это важно при передаче данных между уровнями интерфейса: родительский слой может содержать состояние, которое требуется дочерним слоям, а дочерние слои могут уведомлять родителя о событиях.
Unpoly предоставляет объект layer.data, где можно
хранить любые ключ-значение пары, относящиеся к
конкретному слою:
up.layer.find('comments').data.userId = 42;
up.layer.find('comments').data.page = 3;
Данные слоя существуют только внутри его жизненного цикла. После закрытия слоя или его замены данные автоматически удаляются, что предотвращает утечки состояния между слоями.
up.layer.find(id).data[key] = value — установка
данных.let value = up.layer.find(id).data[key] — получение
данных.delete up.layer.find(id).data[key] — удаление
данных.При создании нового слоя можно передавать инициализационные
данные через параметр data:
up.link('#show-settings', {
layer: 'modal',
data: { theme: 'dark', fontSize: 14 }
});
Эти данные становятся доступными в объекте слоя сразу после его открытия:
let layer = up.layer.find('modal');
console.log(layer.data.theme); // 'dark'
console.log(layer.data.fontSize); // 14
Такая передача данных особенно полезна при открытии модальных окон или панелей, где нужно передать контекст без изменения URL или скрытых полей формы.
Unpoly позволяет дочерним слоям наследовать данные
от родительского слоя. Если при открытии нового слоя не указаны свои
данные, они будут доступны через layer.parent.data:
let parentLayer = up.layer.find('parent');
up.layer.open('/child', {
layer: 'modal',
data: parentLayer.data
});
Это обеспечивает консистентность состояния интерфейса и упрощает управление вложенными слоями.
Для реактивного обновления элементов в зависимости от данных слоя
можно использовать событие
up:layer:updated:
up.on('up:layer:updated', '[up-layer]', function(event) {
let layer = event.layer;
console.log('Данные слоя обновлены:', layer.data);
});
Это позволяет:
Данные слоя можно использовать прямо в HTML через
data-атрибуты и up-data:
<div up-layer="user-info" up-data='{"userId": 42, "role": "admin"}'>
<span>User ID: <span up-text="layer.data.userId"></span></span>
<span>Role: <span up-text="layer.data.role"></span></span>
</div>
При обновлении слоя значения up-text автоматически
подтягиваются из layer.data, что упрощает создание
динамических компонентов без ручной работы с DOM.
layer.data только необходимое состояние,
избегая тяжёлых объектов.delete для снижения
нагрузки памяти.layer.id и layer.parent для
точного контроля вложенности слоев.Работа с данными слоев делает Unpoly мощным инструментом для построения интерактивных и модульных интерфейсов, где каждый слой управляет своим состоянием, а данные легко передаются между уровнями приложения.