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)); // Не закрывать окно в случае ошибки
});
}
});
В этом примере асинхронный запрос к серверу выполняется перед закрытием окна. В случае успешного ответа окно будет закрыто, если же произойдет ошибка — оно останется открытым.
Подтверждение действий: Часто бывает необходимо
запросить у пользователя подтверждение перед закрытием окна, например,
если данные были изменены, а пользователь не сохранил их. Колбэк
beforeClose идеально подходит для реализации такого
поведения.
Очистка данных: В случае, если модальное окно использует динамические данные, перед закрытием можно вызвать функцию для их очистки или сохранения.
Асинхронные операции: Применение промисов или 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. Он
позволяет выполнить действия до того, как окно закроется, а также
обработать асинхронные задачи и изменить стандартное поведение окна в
зависимости от условий. Используя его, можно значительно улучшить
пользовательский опыт, добавив проверку данных, подтверждения действий
или асинхронные операции в процессе закрытия окна.