Библиотека Unpoly предоставляет удобные методы для динамического обновления содержимого страницы без полной перезагрузки. Среди них ключевую роль играют операции append и prepend, которые позволяют вставлять новые элементы в уже существующую структуру DOM.
Обе операции работают с HTML, возвращаемым сервером или локально сгенерированным, и выполняются в контексте указанного селектора.
Пример базовой структуры контейнера:
<div id="messages">
<div class="message">Привет</div>
</div>
Используя append и prepend, новые сообщения можно динамически вставлять в начало или конец списка.
Метод up.append() вставляет новый контент в конец
выбранного элемента. Синтаксис:
up.append(target, content, options)
Пример добавления сообщения в конец списка:
up.append('#messages', '<div class="message">Новое сообщение</div>');
После выполнения в DOM будет:
<div id="messages">
<div class="message">Привет</div>
<div class="message">Новое сообщение</div>
</div>
Особенности append:
up:fragment:inserted, что позволяет привязывать скрипты к
динамически добавленным элементам.Метод up.prepend() вставляет контент в начало
контейнера. Синтаксис аналогичен append:
up.prepend(target, content, options)
Пример добавления нового сообщения в начало:
up.prepend('#messages', '<div class="message">Срочное сообщение</div>');
Результат в DOM:
<div id="messages">
<div class="message">Срочное сообщение</div>
<div class="message">Привет</div>
</div>
Особенности prepend:
Unpoly позволяет загружать контент с сервера и автоматически вставлять его с помощью append или prepend. Пример:
up.append('#messages', '/messages/latest', {
mode: 'append', // Можно явно указать, хотя append() по умолчанию добавляет в конец
target: '#messages'
});
Сервер должен возвращать фрагмент HTML:
<div class="message">Новое сообщение с сервера</div>
Unpoly автоматически добавит его в конец указанного контейнера, сохранив интерактивность других элементов.
Unpoly поддерживает плавные вставки элементов:
up.append('#messages', '<div class="message">Анимированное сообщение</div>', {
animation: 'fade-in'
});
Доступные анимации: fade-in, slide-down,
highlight. Они облегчают визуальное восприятие обновлений и
делают интерфейс более отзывчивым.
При добавлении элементов можно использовать коллбэки для выполнения действий после вставки:
up.prepend('#messages', '<div class="message">Событие</div>', {
onInserted: function(fragment) {
console.log('Элемент добавлен:', fragment);
}
});
События:
up:fragment:inserted — вызывается после вставки нового
фрагмента.up:fragment:revealed — когда фрагмент становится
видимым на странице.Это позволяет инициализировать скрипты, подключать плагины или применять динамическую валидацию к новым элементам.
up.append(target, content, {
animation: 'fade-in',
onInserted: function(fragment) { /* действия после вставки */ }
});
up.prepend(target, content, {
animation: 'slide-down',
onInserted: function(fragment) { /* действия после вставки */ }
});
Методы append и prepend являются основными инструментами Unpoly для динамического обновления интерфейса, обеспечивая простую интеграцию AJAX-контента и удобное управление DOM без перезагрузки страницы.