是否有可能通過綁定發送綁定到mootools類的事件的目標?Mootools類與元素綁定爲參數
即:
checkbox.addEvent('change', this.checkBoxChangeAgain(this));
凡this
== checkbox
PS。這不起作用:
checkbox.addEvent('change', this.checkBoxChangeAgain(checkbox));
是否有可能通過綁定發送綁定到mootools類的事件的目標?Mootools類與元素綁定爲參數
即:
checkbox.addEvent('change', this.checkBoxChangeAgain(this));
凡this
== checkbox
PS。這不起作用:
checkbox.addEvent('change', this.checkBoxChangeAgain(checkbox));
爲什麼它不工作的原因是,通過做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 - 特別是替換綁定事件。
到貝爾巴托夫的答案是如何工作的相似,但使用Class.Binds,最簡單的方法是使用.pass()
http://mootools.net/docs/core/Types/Function#Function:pass
this.checkBoxChangeAgain.pass(checkbox)
對'Class.binds'的依賴通常被忽視,因爲它不會促進良好的可讀性,特別是在長類中,以及性能 - 最便宜的解決方法是將變量的引用傳遞給變量。所有的方法已經包裝一次... – 2012-04-12 08:51:55
由於採用通,我最終圍繞它得到。儘管如此,你的回答仍然指向了我的正確方向。 – Ashley 2012-04-12 07:48:56