Unpoly — это JavaScript-библиотека для создания динамических веб-приложений с минимальными усилиями. Одной из ключевых возможностей является обработка и логирование событий, происходящих на странице, без полной перезагрузки. Логирование позволяет отслеживать жизненный цикл запросов, поведение компонентов и отладочные сообщения.
Unpoly использует собственную систему событий, которая строится вокруг событий жизненного цикла запросов (request lifecycle events) и событий DOM (DOM events). Основные категории событий:
Каждое событие передает объект event с ключевой
информацией о запросе и состоянии страницы. Для анализа логов важно
понимать структуру этого объекта:
{
target: HTMLElement, // элемент, инициировавший событие
request: Up.Request, // объект запроса
response: Up.Response, // объект ответа (если есть)
fragment: HTMLElement, // обновленный фрагмент (если есть)
}
Для логирования можно использовать метод
up.on(eventName, callback) или делегировать события к
конкретным элементам. Примеры:
up.on('up:request', function(event) {
console.log('Запрос инициирован для элемента:', event.target);
});
up.on('up:success', function(event) {
console.log('Успешный ответ:', event.response.status);
});
up.on('up:fail', function(event) {
console.error('Ошибка запроса:', event.response.status);
});
Использование делегирования:
up.on('click', 'a[data-up-target]', function(event) {
console.log('Клик по ссылке с Unpoly:', event.target.href);
});
Unpoly позволяет ограничивать обработку событий конкретными фрагментами или условиями запроса. Например:
up.on('up:after-update', '.comments', function(event) {
console.log('Фрагмент комментариев обновлен');
});
В этом примере обработчик сработает только тогда, когда обновляется
элемент с классом .comments.
Для фильтрации по типу запроса можно использовать объект
event.request:
up.on('up:request', function(event) {
if(event.request.method === 'POST') {
console.log('POST-запрос инициирован');
}
});
Unpoly предоставляет утилиту up.log, которая позволяет
вести централизованное логирование:
up.log.info('Инициализация запроса');
up.log.warn('Запрос занимает слишком много времени');
up.log.error('Ошибка загрузки фрагмента');
Методы info, warn и error
поддерживают форматирование сообщений и позволяют добавлять объекты с
данными для анализа. Например:
up.log.info('Ответ от сервера', { status: 200, url: event.request.url });
Жизненный цикл запроса включает несколько этапов:
up:request) —
момент отправки запроса.up:success /
up:fail) — обработка результата.up:after-update) —
внедрение нового контента.up:request-end) —
финальные действия после обновления страницы.Логирование на каждом этапе позволяет создавать детальные трассировки:
up.on('up:request', function(event) {
up.log.info('Запрос отправлен', { url: event.request.url });
});
up.on('up:success', function(event) {
up.log.info('Ответ успешно получен', { status: event.response.status });
});
up.on('up:after-update', function(event) {
up.log.info('DOM обновлен', { fragment: event.fragment });
});
up.log с событиями жизненного
цикла, чтобы видеть последовательность операций.info,
warn, error), чтобы легче
анализировать критичные ошибки.Логирование событий в Unpoly предоставляет мощный инструмент для мониторинга и отладки динамических веб-приложений, позволяя отслеживать поведение интерфейса, состояние запросов и обновления DOM в реальном времени.