可以简化此事件处理程序并删除匿名函数吗



是否可以通过删除匿名函数来简化图1中的事件处理程序?我找不到用$.proxy解决这个问题的方法,但也许我错过了什么。自定义事件的触发器在图2中。

需要使用.bind,因为使用的是较旧的jQuery版本,目前无法更新。

doSomething的签名需要两个参数,都是字符串。

图1:事件处理程序

$(mySelector).bind('EVT_MY_CUSTOM', function (e, foo, bar) {
    doSomething(foo, bar);
});

图2:触发器

$(mySelector).trigger('EVT_MY_CUSTOM', ['apple', 'banana']);

怎么样:

$('div').bind('EVT_MY_CUSTOM', doSomething)

然后在doSomething:中

var fruit = Array.prototype.slice.call(arguments, 1); // ['apple', 'banana']

演示:http://jsfiddle.net/PKwcC/

如果您已经在其他地方定义了doSomething,那么创建一个从参数列表中剥离事件对象的代理:

var proxy = function() {
    doSomething.apply(this, Array.prototype.slice.call(arguments, 1));
}
$('div').bind('EVT_MY_CUSTOM', proxy)

演示:http://jsfiddle.net/PKwcC/1/

相关内容

  • 没有找到相关文章

最新更新