Основные события Unpoly

Unpoly — это библиотека для работы с динамическими веб-страницами, которая позволяет обновлять части страницы без полной перезагрузки. Одним из ключевых аспектов работы с Unpoly являются события, которые используются для управления поведением страницы, контроля за асинхронными запросами и взаимодействием с пользователем.

События загрузки контента

Unpoly обеспечивает несколько событий, связанных с загрузкой и обновлением контента. Эти события позволяют отслеживать процесс загрузки новых фрагментов страницы и манипулировать интерфейсом в зависимости от состояния загрузки.

  • up:before-render: Событие возникает перед тем, как фрагмент будет вставлен в DOM. Оно позволяет отменить или модифицировать этот процесс, например, изменить содержимое, которое будет вставлено.

    Пример:

    document.body.addEventListener('up:before-render', function(event) {
      if (event.fragment.querySelector('h1')) {
        event.preventDefault();  // Отклонить рендер, если есть заголовок h1
      }
    });
  • up:render: Событие возникает, когда новый фрагмент был вставлен в DOM. Оно может быть полезным для привязки событий к только что добавленным элементам или для выполнения дополнительной логики после завершения рендеринга.

    Пример:

    document.body.addEventListener('up:render', function(event) {
      console.log('Новый контент был загружен');
    });

События обработки асинхронных запросов

Unpoly активно использует асинхронные запросы для обновления части страницы. В процессе отправки запросов и получения ответов, происходят различные события, которые помогают контролировать поведение страницы.

  • up:before-request: Событие, которое происходит перед тем, как запрос будет отправлен на сервер. Это событие позволяет изменять параметры запроса или отменить его выполнение.

    Пример:

    document.body.addEventListener('up:before-request', function(event) {
      if (event.target.tagName === 'FORM') {
        event.detail.data['custom_param'] = 'value';  // Добавить параметр в запрос
      }
    });
  • up:request: Событие срабатывает, когда запрос отправляется на сервер. Этот момент можно использовать для отображения индикаторов загрузки или выполнения других действий, связанных с ожиданием.

    Пример:

    document.body.addEventListener('up:request', function(event) {
      console.log('Запрос был отправлен');
    });
  • up:response: Событие, которое возникает при получении ответа от сервера. Оно может быть использовано для обработки данных ответа или для изменения поведения в зависимости от успешности запроса.

    Пример:

    document.body.addEventListener('up:response', function(event) {
      if (event.detail.status === 200) {
        console.log('Ответ успешно получен');
      } else {
        console.log('Ошибка при получении ответа');
      }
    });
  • up:error: Событие возникает, если произошла ошибка при выполнении запроса. Оно полезно для обработки ошибок и уведомления пользователя о проблемах.

    Пример:

    document.body.addEventListener('up:error', function(event) {
      alert('Ошибка запроса: ' + event.detail.message);
    });

События взаимодействия с пользователем

Unpoly также позволяет отслеживать события, которые происходят при взаимодействии с элементами страницы. Это включает в себя клики, отправку форм, изменения состояния и другие действия, инициированные пользователем.

  • up:click: Событие, которое возникает при клике на ссылку или кнопку, которая используется для инициирования запроса с помощью Unpoly. Это событие полезно для того, чтобы добавлять логику, которая будет выполняться до или после отправки запроса.

    Пример:

    document.body.addEventListener('up:click', function(event) {
      console.log('Элемент был кликнут');
    });
  • up:submit: Событие возникает при отправке формы через Unpoly. Оно позволяет отслеживать, когда форма была отправлена, и выполнять действия перед или после этого процесса.

    Пример:

    document.body.addEventListener('up:submit', function(event) {
      console.log('Форма была отправлена');
    });
  • up:change: Событие, которое возникает при изменении значения формы или другого элемента, который поддерживает событие change. Это может быть полезно для динамического обновления интерфейса в зависимости от изменений, сделанных пользователем.

    Пример:

    document.body.addEventListener('up:change', function(event) {
      console.log('Значение было изменено');
    });

События навигации

Unpoly позволяет отслеживать и контролировать навигацию между различными страницами или фрагментами страницы. Это полезно для реализации SPA (Single Page Application) подходов и для работы с динамическим контентом.

  • up:navigation: Событие возникает при навигации по странице. Оно может быть использовано для отмены перехода или изменения маршрута.

    Пример:

    document.body.addEventListener('up:navigation', function(event) {
      if (event.detail.url === '/protected') {
        event.preventDefault();  // Отклонить переход на защищённую страницу
      }
    });
  • up:hash-change: Это событие срабатывает, когда изменяется хэш в URL, что позволяет отслеживать изменения части адреса страницы.

    Пример:

    document.body.addEventListener('up:hash-change', function(event) {
      console.log('Хэш URL был изменён');
    });

Пользовательские события

Unpoly позволяет создавать и обрабатывать пользовательские события, которые могут быть использованы для более гибкой настройки логики работы на странице.

  • up:custom: Это общее событие, которое можно использовать для реализации любой логики, не охваченной стандартными событиями библиотеки. Оно позволяет гибко настроить поведение, взаимодействуя с различными частями интерфейса.

    Пример:

    document.body.addEventListener('up:custom', function(event) {
      console.log('Произошло пользовательское событие');
    });
    
    // Триггерим событие вручную
    document.body.dispatchEvent(new CustomEvent('up:custom'));

Работа с событиями и асинхронностью

Работа с событиями в Unpoly тесно связана с асинхронностью. Большинство событий в библиотеке происходят в контексте асинхронных операций, таких как загрузка данных с сервера или выполнение анимаций при изменении контента.

Важно помнить, что события в Unpoly могут быть отменены или изменены с помощью методов, предоставляемых API. Например, использование event.preventDefault() позволяет остановить дальнейшее выполнение операции, связанной с событием, что дает разработчику возможность контролировать ход выполнения взаимодействий на странице.

Кроме того, каждый запрос, выполненный через Unpoly, предоставляет подробную информацию о статусе загрузки, что позволяет создавать более гибкие интерфейсы с прогресс-баром, уведомлениями об ошибках и другими визуальными элементами, которые улучшают взаимодействие с пользователем.

Заключение

Unpoly предоставляет богатый набор событий, которые позволяют гибко управлять взаимодействиями на странице. От асинхронных запросов до взаимодействия с пользователем — библиотека предлагает все необходимые инструменты для создания динамичных, интерактивных веб-страниц. Эффективное использование событий позволяет значительно улучшить пользовательский опыт, повысить скорость работы и упростить реализацию сложных интерфейсов.