Rumah > Artikel > hujung hadapan web > Atas dan bawah sekali lagi: Ciri yang tiada dalam penyebaran acara hujung hadapan?
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!