2010-12-31 18 views
18

Mentre guardo il codice jquery-ujs di Rails 3, noto che si lega agli eventi JavaScript personalizzati (submit.rails, click.rails, ecc.). Qualcuno sa dove sono definiti questi eventi personalizzati '.rails'? Sto solo cercando di capire meglio come funziona la roba UJS in Rails 3 così posso usarla in modo più efficace ...Dove sono definiti gli eventi JavaScript personalizzati di Rails 3?

+0

Bryan, si prega di smettere di firmare i messaggi - è una violazione delle politiche di stackoverflow. Grazie! – sethvargo

+0

Whoops, mi dispiace! Farà (o non fare più :). Grazie per avermelo detto. – Bryan

risposta

19

Questi sono namespaced events. Non c'è una definizione per loro; click.rails è lo stesso di click, ma poiché è dotato di un nome con rails, è possibile separare o attivare i gestori di eventi specifici di Rails senza richiamare tutti gli eventi click in un elemento.

Ad esempio, si supponga di avere qualche elemento, <div class='foo' data-remote='true'>, e rails.js lega

$("*[data-remote='true']").bind("click.rails", function() { ... }) 

Nel codice, si hanno anche:

$(".foo").click(function() { ... }); 

Ora, Rails può decidere di invocare quel gestore remoto a un certo punto, ma se ha appena chiamato $(this).click(), quindi invoca tutti i gestori di clic sull'elemento, incluso quello personalizzato, che potrebbe produrre un comportamento indesiderato. Invece, può chiamare $(this).trigger('click.rails') e solo il gestore di clic definito verrà eseguito.

+0

Perfetto ... sottolineando che si tratta di eventi con nomi assegnati, aiuta a chiarire in modo significativo le cose. Grazie Chris! – Bryan

+0

Ok, ma aspetta ... quindi dove sono attivati ​​gli eventi '* .rails'? Non li vedo in jquery-ujs ... – Bryan

+0

Sono attivati ​​dagli eventi regolari e da tutti gli eventi .rails. È solo quando vuoi fare qualcosa di speciale con solo i gestori di .rails (come liberare solo i gestori di binari o attivarli senza far scattare i normali gestori) che entra in gioco il namespace. Vedi http://docs.jquery.com/Namespaced_Events –

Problemi correlati