Heim > Web-Frontend > js-Tutorial > Hauptteil

Auf und ab: Eine fehlende Funktion bei der Front-End-Ereignisausbreitung?

Susan Sarandon
Freigeben: 2024-10-06 16:34:30
Original
891 Leute haben es durchsucht

Up and down again: A missing feature in front end event propagation?

JavaScript und das DOM verwenden die Event-API, damit Elemente ihre Vorfahren über Ereignisse informieren können. Dies funktioniert gut, da jedes Element immer nur genau ein übergeordnetes Element hat (bis zum Dokumentstamm), sodass der Pfad, den ein Ereignis nimmt, linear und relativ kurz im Verhältnis zur Größe des Dokuments ist.

Aber es gibt keinen analogen Mechanismus, um Ereignisse nach unten durch das DOM zu verbreiten:

Als einfaches Beispiel kann man sich ein Szenario wie dieses vorstellen:


<product-search>
   <search-box></search-box>
   <product-card></product-card>
</product-search>


Nach dem Login kopieren

Die API des Suchfeldelements lässt sich einfach mit generischen DOM-APIs erstellen: Immer wenn es intern festlegt, dass die Eingabe eines Benutzers eine Suche starten soll, gibt es ein Ereignis aus, vermutlich so etwas wie „framework:search“.

Die Produktsuche kann dann einfach selbst auf dieses Ereignis warten und wird automatisch sehr widerstandsfähig gegenüber Verschachtelungen und anderen seltsamen HTML-Spielereien; Benutzer können sogar verschiedene Suchkomponenten verwenden, wenn sie an diesem Tag besonders kreativ sind.

Sobald die Produktsuchkomponente das Suchereignis empfangen hat, muss sie die Statusänderung zurück an die Produktkarte weitergeben. Dies ist mit einem generischen Mechanismus überraschend schwierig zu bewerkstelligen.

Das Problem hierbei ist, dass a) sich die Produktsuche möglicherweise nicht nur auf untergeordnete Produktkarten beschränken möchte, sondern mit jedem Element arbeiten möchte, das einer generischen API entspricht, b) das Element, das die Benachrichtigung benötigt, möglicherweise tief darin verschachtelt ist die Produktsuche, und c) die Komponente könnte eine große Anzahl von untergeordneten Elementen haben, was einen Shotgun-Ansatz aus Leistungssicht riskant macht.

Soweit mir bekannt ist, gibt es in der DOM-API keine Funktion, die dieses Problem vollständig löst. Mache ich es hier einfach zu kompliziert? Gibt es einen einfachen Weg, das zu umgehen?

Meine beste Idee hier ist ein Kompromiss, der a) und b) durch die Verwendung von querySelectorAll("*") erreicht und wahllos ein nicht sprudelndes Ereignis für jedes untergeordnete Element auslöst.

Was haltet ihr davon?

Das obige ist der detaillierte Inhalt vonAuf und ab: Eine fehlende Funktion bei der Front-End-Ereignisausbreitung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage