Saya cukup baru di tim pengembang kami.
Saya memerlukan beberapa argumen yang kuat dan / atau contoh "jebakan", sehingga bos saya akhirnya akan memahami kelebihan JavaScript yang Tidak Mengganggu, sehingga dia, dan anggota tim lainnya, berhenti melakukan hal-hal seperti ini:
<input type="button" class="bow-chicka-wow-wow"
onclick="send_some_ajax(); return false;" value="click me..." />
dan
<script type="text/javascript">
function send_some_ajax()
{
// bunch of code ... BUT using jQuery !!!
}
</script>
Saya menyarankan menggunakan pola yang cukup umum:
<button id="ajaxer" type="button">click me...</button>
dan
<script type="text/javascript">
// since #ajaxer is also delivered via ajax, I bind events to document
// -> not the best practice but it's not the point....
$(document).on('click', '#ajaxer', function(ev) {
var $elem = $(this);
ev.preventDefault();
});
Alasan mengapa atasan saya (dan lainnya) tidak ingin menggunakan pendekatan ini adalah bahwa Inspeksi Peristiwa di FireBug (atau Chrome Dev Tools) tidak sederhana lagi, misalnya dengan
<input type="text" name="somename" id="someid" onchange="performChange()">
dia dapat segera melihat fungsi apa yang dijalankan pada perubahan-peristiwa dan langsung menuju ke sana dalam file JS besar penuh dengan kode spaghetti .
Dalam kasus Unobtrusive JavaScript, satu-satunya hal yang akan dilihatnya adalah:
<input type="text" name="somename" id="someid" />
dan dia tidak tahu apakah beberapa peristiwa, jika ada, terikat pada elemen ini dan fungsi mana yang akan dipicu.
Saya mencari solusi dan menemukannya:
$(document).data('events') // or .. $(document).data('events').click
tetapi, "pendekatan" ini menyebabkannya butuh "terlalu lama ..." untuk mengetahui fungsi mana yang menyala pada peristiwa mana, jadi saya disuruh menghentikan acara mengikat seperti itu.
Saya meminta beberapa contoh atau keuntungan kuat atau saran lain untuk "Mengapa kami harus menggunakan UJS"
UPDATE: saran untuk "mengganti pekerjaan" bukanlah solusi yang ideal.
UPDATE 2: Ok, saya tidak hanya menyarankan untuk menggunakan jQuery-binding, saya melakukannya . Setelah saya menulis semua Peristiwa-Delegasi, Bos datang kepada saya dan bertanya kepada saya, mengapa saya melakukan delegasi acara dengan pendekatan dan pendekatan yang berbeda yang dia tidak tahu
Saya menyebutkan beberapa manfaat yang jelas, seperti - Ada 15 bidang input dan semuanya kemudian memiliki onchange
acara (tidak hanya, beberapa di antaranya juga onkeyup
). Jadi lebih pragmatis untuk menulis semacam ini acara delegasi untuk SEMUA bidang input, alih-alih melakukannya 15 kali, terutama jika semua HTML akan di-render dengan gema PHP ->echo '... <input type="text" id="someid" ... />...'
js-this-class-do-something
kelas, jadi, Anda dapat dengan mudah CTRL + F untuk itu dalam kode.