В FAST Element события в DOM управляются по тем же принципам, что и в стандартном HTML, однако библиотека добавляет удобные механизмы для работы с кастомными событиями, обеспечивая их интеграцию с компонентной моделью. Понимание всплытия событий и особенностей их обработки является ключевым для построения реактивных интерфейсов.
Каждое событие в FAST Element наследует поведение стандартного DOM-события. Основные свойства событий:
click,
change, custom-event).bubbles: true.composed: false, событие
ограничено текущим Shadow DOM.Пример создания кастомного события:
this.dispatchEvent(new CustomEvent('item-selected', {
bubbles: true,
composed: true,
detail: { id: 42 }
}));
В этом примере событие item-selected всплывает по дереву
компонентов и выходит за границы Shadow DOM, передавая объект
{ id: 42 } в обработчик.
FAST Element активно использует Shadow DOM, поэтому важно различать два уровня всплытия:
composed: true, чтобы выйти из Shadow DOM и быть доступным
родительскому компоненту или документу.Обработчик на родительском элементе:
const parent = document.querySelector('parent-component');
parent.addEventListener('item-selected', event => {
console.log(event.detail.id); // 42
});
Если свойство composed не установлено, событие останется
скрытым внутри Shadow DOM и не будет перехвачено этим обработчиком.
FAST Element позволяет использовать делегирование событий через
шаблонное связывание. Атрибут @event на элементе в шаблоне
автоматически подписывает компонент на указанное событие:
html`<button @click="${this.handleClick}">Нажми</button>`
При этом handleClick вызывается только для конкретного
элемента, но при необходимости можно реализовать делегирование через
общий родительский элемент, обрабатывая события всех потомков:
parent.addEventListener('click', event => {
if(event.target.matches('button.child')) {
this.onChildButtonClick(event);
}
});
Такой подход снижает количество подписок на события и упрощает управление динамическими элементами.
Observable свойства. Любое свойство компонента,
помеченное как @observable, может генерировать события
изменения, которые можно использовать для реактивной логики.connectedCallback, disconnectedCallback,
attributeChangedCallback. Эти события позволяют отслеживать
подключение компонента к DOM и изменения атрибутов.<slot> событие может быть перехвачено внутри слота,
если оно имеет composed: true. В противном случае слоты
будут “изолированы” от событий внешнего DOM.Пример события для свойства:
@observable selectedItem;
selectedItemChanged(oldValue, newValue) {
this.dispatchEvent(new CustomEvent('selected-item-changed', {
bubbles: true,
composed: true,
detail: { oldValue, newValue }
}));
}
Это позволяет любому родительскому компоненту реагировать на изменения состояния дочернего компонента через единый интерфейс событий.
FAST Element поддерживает стандартные методы
stopPropagation и preventDefault, позволяя
точно контролировать поведение событий:
handleClick(event) {
event.stopPropagation(); // предотвращает дальнейшее всплытие
event.preventDefault(); // предотвращает стандартное поведение, например переход по ссылке
}
Использование этих методов важно для компонентов с несколькими слоями вложенности, чтобы исключить непреднамеренную обработку событий родительскими элементами.
bubbles: true и
composed: true для кастомных событий, если требуется, чтобы
они были видны родительскому компоненту.stopPropagation только при явной
необходимости, чтобы не нарушить работу других компонентов.@observable свойствами для
реактивной архитектуры, обеспечивая чистое отделение состояния от
UI.Всплытие событий в FAST Element — это гибкий инструмент для построения компонентной логики, который сочетает стандартный DOM-механизм с особенностями Shadow DOM и реактивными свойствами компонентов. Правильное использование этих возможностей обеспечивает надежное взаимодействие компонентов и чистую архитектуру приложений.