2010-12-31 10 views
18

Rails 3 jquery-ujsコードを見ると、カスタムJavaScriptイベント(submit.rails、click.railsなど)にバインドされていることがわかりました。誰も、これらのカスタムの.railsイベントが定義されている場所を知っていますか?私は、Rails 3のUJSがどのように動作するのかをもっとよく理解しようとしているので、もっと効果的に使うことができます...Rails 3のカスタムJavaScriptイベントはどこに定義されていますか?

+0

ブライアン、メッセージの署名をやめてください。これは、スタックオーバーフローポリシー違反です。ありがとう! – sethvargo

+0

おっと、ごめんなさい!するかどうか(またはこれ以上は行いません)。私に言ってくれてありがとう。 – Bryan

答えて

19

これらはnamespaced eventsです。それらの定義はありません。 click.railsclickと同じですが、名前空間がrailsであるため、要素のclickイベントをすべて呼び出すことなく、Rails固有のイベントハンドラをアンバインドまたはトリガーできます。 Railsが起動する場合があり、

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

今:

たとえば、あなたには、いくつかの要素、<div class='foo' data-remote='true'>を持っている、とrails.jsがあなたのコードで

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

を結合し、あなたも持っていることを前提としていそのリモートハンドラはある時点で呼び出されますが、ちょうど$(this).click()が呼び出された場合、カスタムハンドラを含むアイテムのすべてのクリックハンドラが呼び出され、望ましくない動作が発生する可能性があります。その代わりに、$(this).trigger('click.rails')を呼び出すことができ、定義したクリックハンドラだけが実行されます。

+0

パーフェクト...名前空間のイベントであることを明確に示すのに役立ちます。クリスおかげで! – Bryan

+0

さて、待っていますが、どこで '* .rails'イベントがトリガーされましたか?私はjquery-ujsでそれらを見ることはできません... – Bryan

+0

これらのイベントは、通常のイベントと.railsイベントによって起動されます。 .ililsハンドラだけで特別なことをしたいとき(ネームスペースが動作するようになったときに、レールハンドラのバインドを解除するか、通常のハンドラをトリガーせずにトリガするなど)。 http://docs.jquery.com/Namespaced_Eventsを参照してください。 –

関連する問題