是否可以通过删除匿名函数来简化图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/