Bindsを使用してmootoolsクラスにバインドされたイベントのターゲットを送信することは可能ですか?
すなわち:
checkbox.addEvent('change', this.checkBoxChangeAgain(this));
ここでthis
==checkbox
ps。これは機能しません:
checkbox.addEvent('change', this.checkBoxChangeAgain(checkbox));
Bindsを使用して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 を検索します。具体的には、bind with event を置き換えます。
Dimitar の答えがどのように機能するかに似ていますが、Class.Binds を使用する最も簡単な方法は、.pass()
http://mootools.net/docs/core/Types/Function#Function:passを使用することです
this.checkBoxChangeAgain.pass(checkbox)