Dalam beberapa tahun terakhir, pengikatan data dua arah telah menjadi teknik yang sangat populer di antara semua jenis kerangka kerja JavaScript dan alat lainnya, dan saya merasa artikel tentang konsep dasar di baliknya mungkin berguna bagi seseorang yang ingin memahami bagaimana tepatnya dua . Pada artikel ini, saya akan mencoba membahasnya sebanyak mungkin tanpa terlalu mendalami mekanisme JavaScript Show
Pertama-tama, penting untuk menunjukkan apa sebenarnya pengikatan data dua arah itu sebelum kita dapat membahas cara kerjanya. Sebagai contoh, mari pertimbangkan pola desain Model-View-Controller (MVC). Di MVC, yang disebut komponen Model mewakili Model data dalam aplikasi, sedangkan komponen Tampilan menentukan bagaimana data disajikan kepada pengguna. Analogi sederhananya adalah menganggap Model sebagai objek JavaScript dan Tampilan sebagai halaman HTML dengan beberapa formulir input. Lihatlah animasi di bawah ini Browser Anda tidak mendukung tag videoSeperti yang Anda lihat, objek JavaScript diperbarui secara real time saat pengguna mengubah konten kolom input. Karena ini adalah pengikatan data dua arah, kebalikannya juga benar. Jika aplikasi memperbarui objek JS, perubahan akan langsung muncul di kolom input Pertama-tama, mari buat halaman HTML sederhana yang akan kita gunakan untuk menguji kode JS yang akan kita tulis. Kode untuk halaman kita dapat ditemukan di bawah dan memiliki 3 elemen penting
Lihat ke Model mengikatMari kita menulis beberapa JS. Kita akan mulai dengan bagian yang mudah. melacak perubahan yang dilakukan pada bidang 2. Saat digunakan pada tag HTML _2 dengan atribut 4 yang disetel ke 5, tag ini diaktifkan saat nilai input diubah. Ini sangat berbeda dari acara _6 , karena 6 diaktifkan setiap kali tombol apa pun dilepaskan, bahkan jika Anda hanya mengirim spam tombol shift tanpa benar-benar mengubah konten bidang inputKode di bawah melakukan trik dalam 3 langkah
_Anda dapat melihatnya beraksi di demo di bawah ini. Pastikan untuk membuka konsol pengembang (biasanya dapat diakses menggunakan kunci 8) dan ketikkan sesuatu ke dalam bidang untuk mengonfirmasi bahwa kode berfungsi sebagaimana mestinya. Setelah selesai, lanjutkan ke bagian berikutnya di mana kita akan membahas penerapan mekanisme kebalikannyaLihat pengikatan data Pen Two-way di JS oleh Tim K (@TimboKZ) di CodePen Model ke Tampilan mengikatBagian ini sedikit lebih rumit daripada yang telah kita lakukan sejauh ini - sekarang entah bagaimana kita harus "memata-matai" objek yang menyimpan data kita. Kemudian, setiap kali objek tersebut mengalami perubahan apa pun, kami harus memperbarui kolom input dengan info terbaru Metode // 1. The object we'll be changing var data = { variable: '' }; // 2. References to 3 elements listed above var inputField = document.getElementById('input'); var button = document.getElementById('input'); var valueField = document.getElementById('value'); // 3. Event listener setup inputField.addEventListener('input', function() { // Update the object data.variable = inputField.value; // Log the new value to console console.log(object.variable); }); _9Ternyata Gecko, mesin di belakang Firefox memiliki metode 9 yang sangat berguna yang didefinisikan pada semua objek JS, yang melakukan persis seperti yang kita inginkan. Ini melacak semua perubahan yang dilakukan pada properti dari beberapa objek dan memberi tahu kami tentangnyaKarena metode ini hanya ada di Gecko, untuk menggunakannya di browser Anda harus menerapkan apa yang disebut polyfill untuk metode 9, yang berarti mendefinisikan metode yang akan mencerminkan fungsinya. Untungnya, ini telah dilakukan sebelumnya dan cuplikan oleh seorang pria bernama Eli Gray ini tampaknya berhasilUntuk mempersingkat artikel ini, saya hanya akan menggunakan sebagian kecil dari polyfill yang ditautkan di atas yang bertanggung jawab untuk melakukan apa yang ingin kami capai, yaitu, melacak perubahan pada properti objek yang menyimpan data kami. Ini akan membuatnya lebih mudah untuk dipahami dan bahkan jika Anda ingin mempelajari semuanya, memahami bagian kecil ini terlebih dahulu akan banyak membantu Anda. Perlu diingat, kode di bawah ini tidak identik dengan yang ada di cuplikan karena saya telah menghapus beberapa bagian dan menulis ulang yang lain agar tidak terlalu ambigu var cat1 = {}; cat1.meow = function() { console.log('Meow!'); } cat1.meow(); // Output: Meow! // .. is equivalent to ... var cat2 = {}; Object.defineProperty(cat2, 'meow', { configurable: false, enumerable: false, writable: false, value: function() { console.log('Meow!'); } }); cat2.meow(); // Output: Meow! 2 metodeSeperti yang mungkin Anda perhatikan jika Anda melihat cuplikan yang ditautkan di atas, pembuatnya sangat bergantung pada metode 2. Sangat penting untuk memahami mengapa itu digunakan dan bagaimana cara kerjanya sebelum kita dapat melanjutkan. Saya akan membicarakannya secara singkat di bawah, tetapi saya sarankan Anda memeriksa tautan MDN di paragraf ini untuk deskripsi yang lebih mendalamSeperti namanya, _4 adalah cara yang sangat mewah untuk mendefinisikan properti pada objek JS. Perhatikan contoh di bawah ini di mana kita mendefinisikan metode pada beberapa objek
Seperti yang terlihat pada contoh di atas, _2 memberikan lebih banyak kontrol atas cara Anda mendefinisikan properti daripada melakukannya menggunakan operator penugasan ( 6). Fitur hebat lainnya yang diberikannya adalah mengonfigurasi fungsi pengambil dan penyetel untuk properti secara eksplisit. Ini mungkin terdengar membingungkan tetapi contoh di bawah ini seharusnya membuatnya tidak terlalu ambigu
Ini adalah potongan kode yang panjang tetapi benar-benar menunjukkan betapa kuatnya 2 itu. Perhatikan bagaimana untuk _8 mesin JavaScript hanya mengembalikan dan memperbarui nilainya seperti yang kita perintahkan ke. Pada saat yang sama, untuk _9, kami telah menyiapkan segala macam manipulasi yang dilakukan pada nilai sebelum benar-benar dikembalikan atau diperbarui. Sekarang pertimbangkan fakta bahwa metode _0 dan 1 dapat berisi logika apa pun yang kita inginkan. Dapatkah Anda melihat bagaimana kami dapat menggunakan ini untuk keuntungan kami?Menambahkan Model ke Tampilan mengikat ke halaman kamiSekarang, kita akan menghubungkan semua bagian kecil menjadi sesuatu yang lebih besar. Mari kita mulai dengan mengambil kode kita dari bagian "View to Model binding" dan membuat beberapa modifikasi
Nah, akankah kita mulai? . Saya menambahkan beberapa komentar ke tambahan baru
Produk akhirDi bawah ini Anda dapat menemukan demo produk akhir. Meskipun butuh waktu cukup lama untuk sampai ke sini, hasil akhirnya tampaknya bekerja persis seperti yang kami harapkan Lihat pengikatan data Pen Two-way di JS oleh Tim K (@TimboKZ) di CodePen Kami telah melalui banyak hal dalam artikel ini dan saya menyadari bahwa jumlah kode yang harus dipahami cukup besar terutama untuk seseorang dengan sedikit pengalaman JavaScript sebelumnya, tetapi saya harap artikel ini membantu Anda memahami, bahkan dari jarak jauh, bagaimana dua- . Jika Anda menemukan kesalahan dalam kode atau penjelasan saya, jangan ragu untuk berkomentar di bawah ini Bagaimana cara mengikat variabel dalam JavaScript?Mengikat itu sederhana. db. startDatabaseConnection(function(){ // apapun }, onError. ikat(ini, var1, var2));
Bagaimana cara mengikat bekerja di JavaScript?bind adalah metode pada prototipe semua fungsi dalam JavaScript. Hal ini memungkinkan Anda untuk membuat fungsi baru dari fungsi yang sudah ada, mengubah konteks fungsi baru ini, dan memberikan argumen apa pun yang Anda inginkan untuk memanggil fungsi baru.
Bagaimana cara memanggil () menerapkan () dan mengikat () dalam JavaScript?Gunakan. panggilan() atau. apply() saat Anda ingin segera menjalankan fungsi, dan mengubah konteksnya. Panggil/terapkan segera panggil fungsi, sedangkan bind mengembalikan fungsi yang, saat dieksekusi nanti, akan memiliki konteks yang benar untuk memanggil fungsi aslinya .
Bagaimana cara mengikat acara di JavaScript?Pengguna dapat mengikuti sintaks di bawah ini untuk menangani pengikatan peristiwa menggunakan addEventListener di JavaScript. elemen. addEventListener(event, eventHandler, useCapture); Dalam sintaks di atas, kita telah meneruskan fungsi callback event dan eventHandler sebagai parameter metode addEventListener. |