2009-05-06 8 views
1

最後のコードを見て、私のjQueryコードでイベントを配線する方法を見てください。私はbindを使うほうが好きで、私のイベントハンドラでは匿名関数を使うのが好きではないことがわかります。jQueryを使用してイベントを配線するためのパターン

以下の2つの理由の私は名前の関数を使用してい

:私のWireUpGlobalCommandClickEventsへ

  1. 可読性
  2. 複数の呼び出しは、私のリンクのクリックに対して複数のイベントハンドラを追加しません。

これは副作用を持っている - 私はこれは今イベントを発生させた要素を指し、OnAddNewSnippetClickであるため、バインドの機能を使用してOnAddNewSnippetClickにデータを渡す必要があります。

私はJavaScriptを第二級の市民として扱ってきました。わかっているように、ここで私のASP.NET MVCアプリケーションで使用している規約をJavaScriptにも強制しようとしています。複数のイベントハンドラが誤って追加されるという私のパラノイアはありますか? jQueryを使用してイベントハンドラを配線するより良いパターンがありますか?

SettingsController.prototype = { 

    OnAddNewSnippetClick: function(event) { 
     event.data.SettingsController.SettingsAjaxHelper.AddNewSnippet(event.data.Parameter, event.data.SettingsController); 
    }, 

    WireUpGlobalCommandClickEvents: function(parameter) { 
     $('#addSnippetLink').bind("click", { SettingsController: this, Parameter: parameter }, this.OnAddNewSnippetClick); 
    } 
}; 

答えて

2

複数のイベントが拘束されている場合は、liveを使用してセレクタに基づいてイベントを自動配線できます。

$(".stuff").live('click',function(){}); 

または

$("#element").one('click',function(){}); 

または

$("#element").unbind('click').bind('click',function(){}); 

しかし、あなたはおそらく過剰ですJavaScriptでMVCをやろうとしているようはい、見えます

http://docs.jquery.com/Events/live#typefn

関連する問題