2010-12-31 11 views
18

Cuando miro el código de jquery-ujs de Rails 3, veo que se une a eventos de JavaScript personalizados (submit.rails, click.rails, etc.). ¿Alguien sabe dónde se definen estos eventos '.rails' personalizados? Solo estoy tratando de entender mejor cómo funciona el material de UJS en Rails 3 para poder usarlo más efectivamente ...¿Dónde se definen los eventos de JavaScript personalizados de Rails 3?

+0

Bryan, detén de firmar tus mensajes, es una violación de las políticas de stackoverflow. ¡Gracias! – sethvargo

+0

¡Ups, lo siento! Hará (o no hará más :). Gracias por decirme. – Bryan

Respuesta

19

Estos son namespaced events. No hay una definición para ellos; click.rails es lo mismo que click, pero dado que está en el espacio de nombres rails, puede desenlazar o desencadenar los controladores de eventos específicos de Rails sin invocar todos los eventos click en un elemento.

Por ejemplo, suponga que tiene algún elemento, <div class='foo' data-remote='true'>, y se une rails.js

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

En su código, también tiene:

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

Ahora, Rieles lo desea, puede invocar ese controlador remoto en algún momento, pero si llamara $(this).click(), invocaría todos los manejadores de clics en el elemento, incluido el personalizado, lo que podría producir un comportamiento no deseado. En su lugar, puede llamar al $(this).trigger('click.rails'), y solo se ejecutará el manejador de clics que definió.

+0

Perfecto ... señalando que son eventos de espacio de nombres ayuda a aclarar las cosas de manera significativa. Gracias Chris! – Bryan

+0

Ok, pero espera ... ¿dónde se desencadenan los eventos '* .rails'? No los veo en jquery-ujs ... – Bryan

+0

Se desencadenan por los eventos normales, así como por los eventos .rails. Solo cuando desea hacer algo especial con solo los manejadores de .rails (como destrabar solo los manejadores de rieles o desencadenarlos sin activar a los manejadores habituales), el espacio de nombres entra en juego. Ver http://docs.jquery.com/Namespaced_Events –

Cuestiones relacionadas