Geliştirme ekibimizde oldukça yeniyim.
Bazı güçlü argümanlara ve / veya "pitfall" örneklerine ihtiyacım var, böylece patronum sonunda Unobtrusive JavaScript'in avantajlarını anlayacaktır, böylece kendisi ve ekibin geri kalanı böyle şeyler yapmayı bırakacaktır:
<input type="button" class="bow-chicka-wow-wow"
onclick="send_some_ajax(); return false;" value="click me..." />
ve
<script type="text/javascript">
function send_some_ajax()
{
// bunch of code ... BUT using jQuery !!!
}
</script>
Oldukça yaygın bir kalıp kullanmayı önerdim:
<button id="ajaxer" type="button">click me...</button>
ve
<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();
});
Patronumun (ve diğerlerinin) bu yaklaşımı kullanmak istememelerinin nedeni, FireBug'daki (veya Chrome Dev Tools'daki) Etkinlik Denetimi'nin artık basit olmamasıdır;
<input type="text" name="somename" id="someid" onchange="performChange()">
change-event'te hangi fonksiyonun çalıştığını hemen görebiliyor ve spagetti koduyla dolu devasa bir JS dosyasından atlayabiliyor .
Göze çarpmayan JavaScript durumunda, göreceği tek şey:
<input type="text" name="somename" id="someid" />
ve eğer varsa, bazı olayların bu elemana bağlı olup olmadığı ve hangi fonksiyonun tetikleneceği konusunda hiçbir fikri yoktur.
Bir çözüm arıyordum ve buldum:
$(document).data('events') // or .. $(document).data('events').click
ama, bu "yaklaşım", hangi fonksiyonun hangi olayı tetiklediğini bulmak için çok uzun sürmesine neden oldu, bu yüzden böyle olayları bağlamayı kesmem söylendi.
Sizden "Neden UJS kullanmalıyız" için bazı örnekler veya güçlü avantajlar ya da başka tür öneriler için rica ediyorum.
GÜNCELLEME: "işi değiştirmek" önerisi ideal bir çözüm değildir.
GÜNCELLEME 2: Tamam, sadece jQuery olayı bağlayıcı kullanmasını önermedim , yaptım . Tüm Etkinlik Delegasyonunu yazdıktan sonra, Patron bana geldi ve neden, bilmediği farklı yaklaşım ve yaklaşımlarla etkinlik delegasyonu yapıyorum diye sordu.
Bazı açık yararlardan bahsettim, örneğin - 15 giriş alanı var ve hepsinin bir onchange
etkinliği var (sadece bazıları değil onkeyup
). Bu nedenle, TÜM giriş alanları için bu tür bir olay delegasyonu yazmaları daha pragmatik, 15 kez yapmak yerine, özellikle de HTML’nin tamamı PHP’nin eko ile gösterilmesi durumundaecho '... <input type="text" id="someid" ... />...'
js-this-class-do-something
sınıfı vardır, böylece kodda kolayca CTRL + F yapabilirsiniz.