Unpoly — это библиотека для постепенной загрузки и обновления частей веб-страницы без полной перезагрузки. Ключевым понятием при работе с Unpoly является контекст. Контекст определяет, какая часть страницы должна быть обновлена, как именно интерпретировать отклик сервера и какие элементы DOM подлежат замене.
Контекст в Unpoly — это логическое иерархическое пространство элементов, на которые распространяется действие. Он используется для точного определения, какие элементы должны быть перерисованы при запросах, а также для передачи информации между запросами.
up-target или, если атрибут не задан, документом
(document).up-target, up-layer, состояние модального окна
или панели.Unpoly использует HTML-атрибуты, чтобы указать контекст обновления:
up-target: определяет CSS-селектор, который
указывает, какой элемент будет заменён содержимым ответа сервера.
<a href="/profile" up-target="#main-content">Профиль</a>
В этом примере клик по ссылке обновит только элемент с id
main-content.
up-layer: указывает слой интерфейса, в котором будет
происходить действие (например, модальные окна, панели, или основной
слой страницы). Слои помогают управлять вложенными контекстами без
конфликта.
<button up-layer="modal" up-target="#modal-body">Открыть форму</button>up-swap: описывает способ замены содержимого
целевого контейнера (replace, append,
prepend, after, before). Способ
замены является частью контекста, так как он определяет, как новые
данные интегрируются в DOM.
<div id="notifications" up-swap="prepend"></div>Unpoly предоставляет API для управления контекстом программно. Основные методы:
up.render(content, options) — рендерит HTML в
заданный контекст.
up.render('<p>Новый контент</p>', { target: '#main-content' });up.reload(selector, options) — обновляет элемент,
используя текущий контекст и параметры запроса.
up.reload('#sidebar', { layer: 'sidebar' });up.layer.get(elementOrSelector) — возвращает объект
слоя, которому принадлежит элемент. Позволяет определить текущий
контекст для сложных интерфейсов с модальными окнами и
панелями.
Контекст также используется для фильтрации событий. Например, событие
up:fragment:loaded передаёт информацию о контейнере,
который был обновлён, что позволяет реагировать только на нужный элемент
страницы:
document.addEventListener('up:fragment:loaded', function(event) {
console.log('Обновлён элемент:', event.target);
});
Контексты могут быть вложенными. При обновлении дочернего контейнера Unpoly учитывает родительский контекст:
up-target.Пример вложенного контекста:
<div id="dashboard">
<div id="widgets" up-target=".widget">
<div class="widget" id="widget-1">
<button up-target="#widget-1">Обновить виджет</button>
</div>
</div>
</div>
Нажатие кнопки обновит только конкретный виджет, сохранив остальную часть панели нетронутой.
Модальные окна в Unpoly — это отдельные слои. Контекст модального окна отличается от контекста основной страницы:
up.layer.get('modal').hide({ result: { updated: '#main-content' } });
swap).up-target,
up-layer, up-swap.Контекст является фундаментальным понятием для построения сложных интерфейсов на Unpoly. Правильное понимание и управление контекстами позволяет создавать интерактивные, отзывчивые и локально обновляемые страницы без полной перезагрузки.