2010-12-31 1 views
18

Rails 3 jquery-ujs 코드를 살펴보면 맞춤 자바 스크립트 이벤트 (submit.rails, click.rails 등)에 바인딩된다는 것을 알 수 있습니다. 누구든지이 custom '.rails'이벤트가 정의 된 위치를 알고 있습니까? 저는 레일즈 3에서 UJS가 어떻게 작동하는지 더 잘 이해하려고 노력하고 있습니다. 그래서 더 효과적으로 사용할 수 있습니다 ...레일즈 3 커스텀 자바 스크립트 이벤트는 어디에 정의되어 있습니까?

+0

Bryan, 메시지 서명을 중단하십시오. 이는 스택 오버 플로우 정책을 위반하는 것입니다. 감사! – sethvargo

+0

죄송합니다. 윌 (또는 더 이상하지 :). 말해 주셔서 감사합니다. – Bryan

답변

19

이들은 namespaced events입니다. 그들에 대한 정의는 없습니다. click.railsclick과 동일하지만, 이름 공간이 rails이므로 요소의 click 이벤트를 모두 호출하지 않고 Rails 관련 이벤트 핸들러를 바인드 해제하거나 트리거 할 수 있습니다. 예를 들어

, 당신은 몇 가지 요소 <div class='foo' data-remote='true'> 할 수 있다고 가정 rails.js 코드에서

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

을 결합, 당신은 또한이 :

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

, 레일이 호출 할 수 있습니다 어떤 시점에서 원격 처리기를 호출하지만 방금 $(this).click()을 호출 한 경우 사용자 지정 항목을 포함하여 항목에 대한 모든 클릭 핸들러가 호출되어 원하지 않는 동작이 발생할 수 있습니다. 대신, $(this).trigger('click.rails')을 호출 할 수 있으며 정의한 클릭 핸들러 만 실행됩니다.

+0

완벽 ... 네임 스페이스가 적용된 이벤트라는 것을 지적하면 명확하게 정리하는 데 도움이됩니다. 크리스 고마워! – Bryan

+0

좋아,하지만 기다려 ... 어디에서 '* .rails'이벤트가 발생 했나요? 나는 jquery-ujs에서 그들을 보지 못합니다 ... – Bryan

+0

그들은 .rails 이벤트뿐만 아니라 일반 이벤트에 의해 트리거됩니다. .ilils 핸들러 (레일 핸들러의 바인딩을 해제하거나 일반 핸들러를 트리거하지 않고 트리거하는 것과 같은)를 사용하여 네임 스페이스가 작동하도록하는 특수한 작업을 수행하려는 경우에만 해당됩니다. http://docs.jquery.com/Namespaced_Events를 참조하십시오. –