Unpoly — это библиотека для прогрессивного обновления интерфейсов в веб-приложениях без полной перезагрузки страниц. Одной из ключевых концепций является контекст слоев (layer context), который управляет тем, как отдельные фрагменты страницы взаимодействуют друг с другом, как обрабатываются обновления и навигация.
Unpoly использует модель слоев, где каждый слой — это область DOM,
которую библиотека может обновлять независимо. Слой
определяется через атрибут up-target или создаётся
автоматически при выполнении навигации. Слои имеют следующие
особенности:
layerId) уникален
и позволяет управлять его состоянием.Иерархия слоев выглядит как дерево: корневой слой соответствует основной странице, дочерние слои могут открываться поверх него (например, модальные окна, всплывающие панели).
Контекст слоя — это совокупность состояния и конфигурации слоя. Он включает:
up-transition), поведение при загрузке
(up-on-load) и при отмене (up-on-cancel).Контекст слоя обеспечивает изоляцию обновлений.
Изменения внутри слоя не влияют на родительский слой, если это не явно
указано через опции up-target или
up-layer.
Слои создаются автоматически при вызове методов навигации Unpoly,
таких как up.navigate или up.modal.
Пример:
up.modal('/users/42/edit', {
layer: 'modal'
});
В этом примере:
modal.Unpoly поддерживает управление историей слоев. Каждый слой может содержать собственные состояния истории. Это позволяет:
Методы для работы с историей слоев:
// Переход к новому URL внутри текущего слоя
up.layer.current.navigate('/dashboard');
// Возврат к предыдущему состоянию слоя
up.layer.current.pop();
Контекст слоя генерирует собственные события, которые позволяют контролировать поведение интерфейса:
up:layer:opened — срабатывает после создания нового
слоя.up:layer:closed — вызывается при закрытии слоя и
удалении его из DOM.up:layer:updated — информирует о том, что слой получил
новый контент.Привязка обработчиков к конкретному слою гарантирует, что они не будут мешать другим слоям:
up.on('up:layer:opened', { layer: 'modal' }, () => {
console.log('Модальное окно открыто');
});
Дочерние слои могут наследовать часть состояния родительского слоя:
Наследование контекста позволяет строить сложные интерфейсы с модальными окнами, всплывающими панелями и динамическими фрагментами, сохраняя управление состоянием на каждом уровне.
Unpoly предоставляет гибкие механизмы управления закрытием слоев:
up.layer.get('modal').close();
up:layer:closing), которые позволяют отменить закрытие при
необходимости.up-target.Контекст слоев является фундаментом архитектуры Unpoly. Он обеспечивает независимость, контроль истории и изоляцию событий, позволяя строить динамичные и отзывчивые интерфейсы без полной перезагрузки страниц.