2012-04-11 89 views
0

是否有可能通過綁定發送綁定到mootools類的事件的目標?Mootools類與元素綁定爲參數

即:

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

this == checkbox

PS。這不起作用:

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

回答

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 - 特別是替換綁定事件。

+0

由於採用通,我最終圍繞它得到。儘管如此,你的回答仍然指向了我的正確方向。 – Ashley 2012-04-12 07:48:56

0

到貝爾巴托夫的答案是如何工作的相似,但使用Class.Binds,最簡單的方法是使用.pass()http://mootools.net/docs/core/Types/Function#Function:pass

this.checkBoxChangeAgain.pass(checkbox)

+0

對'Class.binds'的依賴通常被忽視,因爲它不會促進良好的可讀性,特別是在長類中,以及性能 - 最便宜的解決方法是將變量的引用傳遞給變量。所有的方法已經包裝一次... – 2012-04-12 08:51:55