Rumah  >  Artikel  >  hujung hadapan web  >  Atas dan bawah sekali lagi: Ciri yang tiada dalam penyebaran acara hujung hadapan?

Atas dan bawah sekali lagi: Ciri yang tiada dalam penyebaran acara hujung hadapan?

Susan Sarandon
Susan Sarandonasal
2024-10-06 16:34:30876semak imbas

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

JavaScript dan DOM menggunakan API Acara untuk membenarkan elemen memberitahu nenek moyang mereka tentang perkara yang berlaku. Ini berfungsi dengan baik kerana setiap elemen hanya mempunyai tepat satu induk (sehingga akar dokumen), jadi laluan yang diambil oleh peristiwa adalah linear dan agak pendek berbanding dengan saiz dokumen.

Tetapi tiada mekanisme analog untuk menyebarkan peristiwa ke bawah melalui DOM:

Untuk contoh mudah, seseorang boleh bayangkan senario seperti ini:


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


API bagi elemen kotak carian mudah dibina dengan API DOM generik: apabila ia secara dalaman menentukan bahawa input pengguna harus memulakan carian, ia mengeluarkan sejenis peristiwa, mungkin sesuatu seperti framework:search.

Pencarian produk kemudiannya boleh mendengar sendiri acara tersebut dan secara automatik menjadi sangat berdaya tahan terhadap sarang dan penipuan HTML pelik yang lain; pengguna malah boleh menggunakan komponen carian yang berbeza jika mereka berasa lebih kreatif pada hari itu.

Apabila komponen carian produk telah menerima acara carian, ia perlu menyebarkan perubahan keadaan kembali ke kad produk. Ini amat sukar dilakukan menggunakan mekanisme generik.

Masalahnya di sini ialah a) carian produk mungkin tidak mahu mengehadkan dirinya kepada kanak-kanak kad produk sahaja tetapi berfungsi dengan mana-mana elemen yang mematuhi beberapa API generik, b) elemen yang memerlukan pemberitahuan mungkin bersarang dalam carian produk, dan c) komponen mungkin mempunyai bilangan kanak-kanak yang ramai, menjadikan pendekatan senapang patah berisiko dari perspektif prestasi.

Setahu saya, tiada ciri dalam API DOM yang menangani perkara ini sepenuhnya. Adakah saya hanya membuat perkara terlalu rumit di sini? Adakah terdapat cara mudah untuk mengatasinya?

Idea terbaik saya di sini ialah kompromi yang mencapai a) dan b) dengan menggunakan querySelectorAll("*") dan menghantar acara tidak menggelegak pada setiap elemen kanak-kanak secara sembarangan.

Apa pendapat anda semua?

Atas ialah kandungan terperinci Atas dan bawah sekali lagi: Ciri yang tiada dalam penyebaran acara hujung hadapan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn