0

Bindsを使用してmootoolsクラスにバインドされたイベントのターゲットを送信することは可能ですか?

すなわち:

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

ここでthis==checkbox

ps。これは機能しません:

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

4

2 に答える 2

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 with event を置き換えます。

于 2012-04-11T21:47:11.733 に答える
0

Dimitar の答えがどのように機能するかに似ていますが、Class.Binds を使用する最も簡単な方法は、.pass() http://mootools.net/docs/core/Types/Function#Function:passを使用することです

this.checkBoxChangeAgain.pass(checkbox)

于 2012-04-12T07:58:55.707 に答える