Колбэк beforeClose

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

Основная цель колбэка

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

Синтаксис и использование

Колбэк beforeClose передается в качестве опции при создании экземпляра модального окна. Он является функцией, которая будет вызвана непосредственно перед процессом закрытия окна. Синтаксис выглядит следующим образом:

const modal = new tingle.modal({
    closeMethods: ['button', 'overlay', 'escape'],
    closeLabel: 'Закрыть',
    beforeClose: function() {
        // Ваши действия до закрытия окна
    }
});

Функция beforeClose может содержать любой код, который должен выполниться перед закрытием модального окна. Важно отметить, что колбэк должен вернуть true или false, чтобы продолжить или предотвратить процесс закрытия соответственно.

Возврат значения в колбэке

Колбэк beforeClose должен возвращать булевое значение. Возвращение значения true позволяет модальному окну закрыться, в то время как false предотвращает закрытие.

const modal = new tingle.modal({
    beforeClose: function() {
        const userConfirmed = confirm('Вы уверены, что хотите закрыть окно?');
        if (!userConfirmed) {
            return false; // Предотвращает закрытие
        }
        return true; // Окно будет закрыто
    }
});

Применение асинхронных операций

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

const modal = new tingle.modal({
    beforeClose: function() {
        return new Promise((resolve, reject) => {
            fetch('/api/saveData')
                .then(response => {
                    if (response.ok) {
                        resolve(true); // Закрыть окно, если данные сохранены
                    } else {
                        reject(false); // Не закрывать окно, если произошла ошибка
                    }
                })
                .catch(() => reject(false)); // Не закрывать окно в случае ошибки
        });
    }
});

В этом примере асинхронный запрос к серверу выполняется перед закрытием окна. В случае успешного ответа окно будет закрыто, если же произойдет ошибка — оно останется открытым.

Полезные сценарии использования

  1. Подтверждение действий: Часто бывает необходимо запросить у пользователя подтверждение перед закрытием окна, например, если данные были изменены, а пользователь не сохранил их. Колбэк beforeClose идеально подходит для реализации такого поведения.

  2. Очистка данных: В случае, если модальное окно использует динамические данные, перед закрытием можно вызвать функцию для их очистки или сохранения.

  3. Асинхронные операции: Применение промисов или async/await позволяет асинхронно обрабатывать операции, такие как отправка данных или выполнение длительных вычислений, до того как окно будет закрыто.

Пример с применением различных сценариев

const modal = new tingle.modal({
    closeMethods: ['button', 'overlay', 'escape'],
    beforeClose: function() {
        return new Promise((resolve, reject) => {
            // Запрос на сервер для проверки данных
            fetch('/api/validateData')
                .then(response => {
                    if (response.ok) {
                        // Очистка формы или выполнение других действий
                        clearForm();
                        resolve(true); // Закрыть окно, если все в порядке
                    } else {
                        reject(false); // Не закрывать окно, если есть ошибка
                    }
                })
                .catch(() => {
                    reject(false); // Не закрывать окно в случае ошибки
                });
        });
    }
});

В данном примере перед закрытием окна выполняется запрос на сервер для проверки данных. Если данные валидны, выполняется очистка формы, а затем окно закрывается. В случае ошибки закрытие окна отклоняется.

Заключение

Колбэк beforeClose является мощным инструментом для управления поведением модального окна в библиотеке tingle.js. Он позволяет выполнить действия до того, как окно закроется, а также обработать асинхронные задачи и изменить стандартное поведение окна в зависимости от условий. Используя его, можно значительно улучшить пользовательский опыт, добавив проверку данных, подтверждения действий или асинхронные операции в процессе закрытия окна.