Когда я просматриваю код Rails 3 jquery-ujs, я замечаю, что он привязывается к пользовательским событиям JavaScript (submit.rails, click.rails и т.д.). Кто-нибудь знает, где определены эти пользовательские события .rails? Я просто пытаюсь лучше понять, как работает UJS в Rails 3, поэтому я могу использовать его более эффективно...
Где определены определенные события JavaScript Rails 3?
Ответ 1
Это события с именами. Там нет определения для них; click.rails
совпадает с click
, но из-за того, что он помещается в папку rails
, вы можете отменить или вызвать обработчики событий, специфичных для Rails, без вызова всех событий click
для элемента.
Например, предположим, что у вас есть какой-то элемент, <div class='foo' data-remote='true'>
и rails.js binds
$("*[data-remote='true']").bind("click.rails", function() { ... })
В вашем коде у вас также есть:
$(".foo").click(function() { ... });
Теперь Rails может захотеть вызвать этот удаленный обработчик в какой-то момент, но если он просто вызвал $(this).click()
, тогда он будет вызывать все обработчики кликов для элемента, включая ваш пользовательский, что может привести к нежелательному поведению. Вместо этого он может вызывать $(this).trigger('click.rails')
, и только обработчик клика, который он определил, будет запущен.