Javascript 使用jQuery连接事件的模式

Javascript 使用jQuery连接事件的模式,javascript,jquery,Javascript,Jquery,请看最后的代码,看看我在jQuery代码中用来连接事件的方法。我更喜欢使用bind,正如您所看到的,我不喜欢在事件处理程序中使用匿名函数 我之所以使用命名函数,是因为以下两个原因: 可读性 多次调用my WireUpGlobalCommand和ClickEvents不会将多个事件处理程序添加到单击我的链接中 这有一个副作用-我需要使用bind的功能将数据传递给OnAddNewSnippetClick,因为在OnAddNewSnippetClick中,它现在指的是引发事件的元素 我一直将JavaS

请看最后的代码,看看我在jQuery代码中用来连接事件的方法。我更喜欢使用bind,正如您所看到的,我不喜欢在事件处理程序中使用匿名函数

我之所以使用命名函数,是因为以下两个原因:

  • 可读性
  • 多次调用my WireUpGlobalCommand和ClickEvents不会将多个事件处理程序添加到单击我的链接中
  • 这有一个副作用-我需要使用bind的功能将数据传递给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);
        }
    };
    

    如果您真的对绑定多个事件有疑虑,可以使用live,它会根据选择器自动连接事件

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

    但是,是的,看起来您试图用javascript实现MVC,这可能有些过头了

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