Unpoly — это библиотека для создания быстрых, динамичных веб-приложений на JavaScript без необходимости полного обновления страницы. Основной принцип работы Unpoly заключается в замене содержимого отдельных частей страницы (фрагментов) через AJAX-запросы, сохраняя при этом состояние браузера, URL и историю навигации.
Фрагменты страницы идентифицируются с помощью атрибута
up-target, который указывает элемент, куда будет загружен
новый контент. Каждое взаимодействие, инициированное
пользователем, может быть привязано к конкретному целевому
элементу, что позволяет создавать модальные окна, табы, списки
с динамической подгрузкой и многое другое.
up-target — определяет элемент, который будет обновлён
после выполнения запроса.up-url — указывает URL для запроса, который заменит
содержимое целевого элемента.up-method — задаёт HTTP-метод (GET,
POST, PUT, DELETE) для
запроса.up-transition — задаёт анимацию при обновлении
содержимого, например, fade, slide или
none.up-confirm — отображает диалог подтверждения перед
выполнением действия.Пример использования:
<button
up-target="#content"
up-url="/posts/42"
up-transition="fade">
Показать пост
</button>
<div id="content">
<!-- Здесь загрузится контент -->
</div>
Unpoly предоставляет множество событий, позволяющих реагировать на различные стадии загрузки контента:
up:click — срабатывает при клике на элемент, который
инициирует запрос.up:request — происходит перед отправкой
AJAX-запроса.up:success — срабатывает при успешной загрузке нового
содержимого.up:fragment:loaded — триггер для каждого обновлённого
фрагмента.up:error — вызывается при ошибке запроса.События можно использовать для выполнения дополнительной логики, например, валидации форм, трекинга аналитики или запуска пользовательских анимаций.
up.on('up:fragment:loaded', '#content', function(event) {
console.log('Фрагмент #content обновлён');
});
Формы в Unpoly автоматически перехватываются, если они содержат
атрибуты up-target или up-url. Это позволяет
отправлять данные без полной перезагрузки страницы.
Пример:
<form
up-target="#messages"
up-method="POST"
up-url="/messages/create">
<input type="text" name="text">
<button type="submit">Отправить</button>
</form>
<div id="messages">
<!-- Новое сообщение добавится сюда -->
</div>
Формы поддерживают все стандартные методы HTTP, а также автоматическое отображение ошибок валидации, если сервер возвращает статус 422 с HTML-контентом ошибок.
Unpoly позволяет динамически создавать модальные окна без подключения
сторонних библиотек. Для этого используется атрибут
up-modal:
<a
href="/posts/42/edit"
up-modal>
Редактировать пост
</a>
При клике на ссылку содержимое загрузится в модальное окно, а
закрытие модального окна не приводит к перезагрузке родительской
страницы. События up:modal:opened и
up:modal:closed позволяют выполнять дополнительную логику,
например, очистку форм или обновление данных на фоне.
Unpoly автоматически обновляет URL и историю браузера при замене
фрагментов, что делает навигацию естественной. Можно использовать
up-history для управления поведением истории:
true (по умолчанию) — создаёт запись в истории при
загрузке нового фрагмента.false — обновление фрагмента не сохраняется в
истории.Пример:
<a
href="/posts/42"
up-target="#content"
up-history="false">
Показать пост без записи в истории
</a>
Unpoly предоставляет глобальный объект up, позволяющий
изменять поведение библиотеки:
// Настройка времени таймаута для всех AJAX-запросов
up.fragment.config.timeout = 10000;
// Подключение глобального обработчика ошибок
up.on('up:error', function(event) {
alert('Произошла ошибка загрузки контента');
});
Также можно глобально задать анимацию переходов или обработку форм по умолчанию.
Unpoly легко интегрируется с библиотеками для валидации форм, визуальных эффектов и SPA-функционала. Благодаря своей структуре на основе фрагментов, он не конфликтует с существующими DOM-элементами, что позволяет внедрять динамические обновления без полной переработки фронтенда.
Unpoly обеспечивает быструю, модульную и управляемую замену контента на страницах, сохраняя при этом историю и динамику интерфейса. Ключевые концепции — фрагменты, события, формы и модальные окна — создают гибкую основу для построения интерактивных веб-приложений без перегрузки страницы.