Mootools类以元素作为参数绑定

时间:2012-04-11 20:30:58

标签: javascript mootools

是否可以通过绑定发送绑定到mootools类的事件的目标?

即:

checkbox.addEvent('change', this.checkBoxChangeAgain(this));

this == checkbox

的位置

PS。这不起作用:

checkbox.addEvent('change', this.checkBoxChangeAgain(checkbox));

2 个答案:

答案 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)