Библиотека Cash — легковесная альтернатива jQuery, предоставляющая удобный API для работы с DOM, событиями и эффектами. Одним из мощных инструментов при работе с событиями является использование пространств имен событий. Они позволяют организовывать обработчики, управлять ими избирательно и избегать конфликтов между различными частями кода.
События в Cash можно подписывать с указанием имени пространства. Пространство имени представляет собой строку, добавленную через точку после типа события:
$('.button').on('click.menu', function() {
console.log('Меню открыто');
});
click — стандартный тип события.menu — имя пространства.Имя пространства помогает группировать обработчики. Один и тот же элемент может иметь несколько обработчиков одного типа, но с разными пространствами имен:
$('.button').on('click.menu', handleMenu);
$('.button').on('click.tooltip', handleTooltip);
В этом примере один элемент реагирует на клик двумя различными обработчиками, каждый в своём пространстве.
Пространства имен особенно полезны при удалении событий. Можно удалить конкретный обработчик, указав его пространство:
$('.button').off('click.menu');
menu.tooltip останется.Также возможно удаление всех событий в конкретном пространстве, независимо от типа события:
$('.button').off('.tooltip');
tooltip будут удалены.Один обработчик может быть зарегистрирован сразу в нескольких пространствах:
$('.button').on('click.menu.tooltip', function() {
console.log('Событие для меню и подсказки');
});
$('.button').off('.menu'); // Удаляется, потому что обработчик связан с пространством menu
Модульность кода Пространства имен позволяют разделять обработчики по функциональным блокам. Например, события меню, модальных окон и подсказок можно регистрировать с разными пространствами, чтобы управление было точечным.
Избежание конфликтов Если разные части приложения добавляют обработчики на один и тот же элемент, пространства имен предотвращают случайное удаление чужих обработчиков.
Упрощённая очистка событий При удалении динамически создаваемых компонентов достаточно удалить все события, относящиеся к конкретному пространству, без перебора каждого типа события.
function initTooltip() {
$('.tooltip-trigger').on('mouseenter.tooltip', showTooltip);
$('.tooltip-trigger').on('mouseleave.tooltip', hideTooltip);
}
function destroyTooltip() {
$('.tooltip-trigger').off('.tooltip'); // удаляет все события tooltip
}
addEventListener они не работают.Cash поддерживает делегирование через .on(), и
пространства имен полностью совместимы с этим:
$(document).on('click.menu', '.dropdown-item', function() {
console.log('Выбран пункт меню');
});
menu позволяет при необходимости
удалить все делегированные обработчики для меню одним вызовом:$(document).off('.menu');
common, all),
чтобы не пересекаться с другими обработчиками.click.modal,
mouseenter.tooltip.Пространства имен в Cash создают мощный механизм управления событиями, который повышает модульность и читаемость кода, облегчает поддержку и предотвращает нежелательные конфликты между обработчиками.