是否可以通过绑定发送绑定到mootools类的事件的目标?
即:
checkbox.addEvent('change', this.checkBoxChangeAgain(this));
this
== checkbox
PS。这不起作用:
checkbox.addEvent('change', this.checkBoxChangeAgain(checkbox));
答案 0 :(得分:2)
它不起作用的原因是通过执行method(this)
你实际上立即调用它。 method.bind(checkbox)
将修饰函数,并在以后调用时将范围更改为复选框。
为什么不代理呢?
var self = this;
checkbox.addEvent('change', function(e) {
self.checkBoxChangeAgain(this);
});
new Class({
checkBoxChangeAgain: function(checkbox) {
this; // instance
checkbox; // == org checkbox
}
});
默认情况下,事件处理程序的第一个参数是事件,范围将是触发元素。
因此:
checkbox.addEvent('change', this.checkBoxChangeAgain);
意味着:
new Class({
checkBoxChangeAgain: function(event) {
this === event.target;
}
});
这意味着您还可以:
checkbox.addEvent('change', this.checkBoxChangeAgain.bind(this));
这将成为:
new Class({
checkBoxChangeAgain: function(event) {
this != event.target; // true
event.target === checkbox; // true
this; // the class instance
}
});
我希望这会给你一些想法。此外,在SO上搜索bindWithEvent - 特别是用事件替换bind。
答案 1 :(得分:0)
类似于Dimitar的答案,但使用Class.Binds,最简单的方法是使用.pass()
http://mootools.net/docs/core/Types/Function#Function:pass
this.checkBoxChangeAgain.pass(checkbox)