2010-12-31 18 views
18

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?

+0

Bryan, proszę przestań podpisywać wiadomości - jest to naruszenie zasad dotyczących stackoverflow. dzięki! – sethvargo

+0

Ups, przepraszam! Zrobi (lub nie zrobi więcej :). Dzięki, że mi powiedziałeś. – Bryan

Odpowiedz

19

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ęć.

+0

Idealne ... wskazanie, że są zdarzeniami o przestrzeni nazw, znacznie ułatwia rozjaśnianie. Dzięki Chris! – Bryan

+0

OK, ale czekaj ... więc gdzie są wywoływane zdarzenia "* .rails"? Nie widzę ich w jquery-ujs ... – Bryan

+0

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 –