Przeglądając kod jquery-ujs Rails 3, zauważam, że wiąże on niestandardowe zdarzenia JavaScript (submit.rails, click.rails, itp.). Czy ktokolwiek wie, gdzie są zdefiniowane niestandardowe zdarzenia ".rails"? Po prostu staram się lepiej zrozumieć, jak działają UJS w Rails 3, dzięki czemu mogę efektywniej z nich korzystać ...Gdzie są zdefiniowane niestandardowe zdarzenia JavaScript Rails 3?
Odpowiedz
To są namespaced events. Nie ma dla nich definicji; Numer click.rails
jest taki sam jak click
, ale ponieważ jest podany w nazwach za pomocą rails
, można odwiązać lub wywołać procedury obsługi zdarzeń specyficzne dla Railsów bez wywoływania wszystkich zdarzeń click
elementu.
Na przykład załóżmy, że masz jakiś element, <div class='foo' data-remote='true'>
i rails.js wiąże
$("*[data-remote='true']").bind("click.rails", function() { ... })
W kodzie, masz również:
$(".foo").click(function() { ... });
Teraz Szyny mogą chcieć wywołać ten zdalny program obsługi w pewnym momencie, ale jeśli tylko zadzwonił pod numer $(this).click()
, wówczas wywołałby wszystkie procedury obsługi kliknięć elementu, w tym niestandardowe, które mogą powodować niepożądane zachowanie. Zamiast tego może wywołać $(this).trigger('click.rails')
i zostanie uruchomiony tylko zdefiniowany przez niego moduł obsługi kliknięć.
Idealne ... wskazanie, że są zdarzeniami o przestrzeni nazw, znacznie ułatwia rozjaśnianie. Dzięki Chris! – Bryan
OK, ale czekaj ... więc gdzie są wywoływane zdarzenia "* .rails"? Nie widzę ich w jquery-ujs ... – Bryan
Są one wyzwalane przez zwykłe zdarzenia, jak również wszelkie zdarzenia .rails. Dopiero gdy chcesz zrobić coś specjalnego za pomocą tylko uchwytów .rails (takich jak rozłączanie tylko procedur obsługi szyn lub wyzwalanie ich bez uruchamiania standardowych programów obsługi), uruchamiasz przestrzeń nazw. Zobacz http://docs.jquery.com/Namespaced_Events –
Bryan, proszę przestań podpisywać wiadomości - jest to naruszenie zasad dotyczących stackoverflow. dzięki! – sethvargo
Ups, przepraszam! Zrobi (lub nie zrobi więcej :). Dzięki, że mi powiedziałeś. – Bryan