1

私はコードを(1つのオブジェクト内に)持っており onclick: this._addX.bind(this) 、次に別のオブジェクト 内に持っています onclick: this._addY.bind(this)

現在、_addX() と _addY はほぼ同じですが、どちらも (クリック イベントで) 異なる引数値を持つ関数を呼び出すことになります。たとえば、_addX は foo('x') を呼び出し、_addY は foo('y') を呼び出します。だから私は試しました:

onclick: this._add.bind(this,'x') onclick: this._add.bind(this,'y') 2 つのオブジェクトで。そしてもちろん、引数を受け入れるように _add を変更しました。

実行時に _add が呼び出されると、着信引数は表示されません! さまざまな構文をいじりましたが、何も機能しません。何か案は?元の構文は問題なく動作しますが (引数なし)、1 行だけ異なる大きな関数を複製する必要があり、これが苦痛です。前もって感謝します。

_add: function(which) {
    var me = this;
    var checkFull = function(abk) {
        if (abk.isFull) {
            alert("full");
        } else {
        alert(which);  // which is always undefined here!
        }
    };
    getAddressBook(checkFull); //checkFull is a fn called by getAddressBook
},
4

3 に答える 3

3

これは機能し、スコープを要素ではなくクラスに設定して、要素のクリックイベント内にスコープを保持します。スコープを add メソッドに渡す意味はありません。

var foo = new Class({
    Implements: [Options],
    add: function(what) {
        alert(what);
    },
    initialize: function(options) {
        this.setOptions(options);

        this.options.element.addEvents({
            click: function() {
                this.add(this.options.what);
            }.bind(this)
        });
    }
});

window.addEvent("domready", function() {
    new foo({
        element: $("foo"),
        what: "nothin'"
    });
});

id=foo で要素を作成し、それをクリックしてテストするだけです (何も警告しません)。onclick が、通常の要素クリック イベントではなく、クラス内の関数/イベント ハンドラーである場合、状況はわずかに異なります - http://mootools.net/shell/に作業の作業スケルトンを投稿

于 2010-01-10T17:11:14.280 に答える
1

私の以前の回答を読んだ場合は、無視してください。MooTools.bindメソッドは、パラメーターの受け渡しをサポートしています。したがって、他の何かが期待どおりに機能していません。

onclick: this._add.bind(this, 'y');

以下はJSBin の簡単な設定で、 bind が実際にパラメーターを渡す方法を示しています。

于 2010-01-10T04:43:37.953 に答える
0

bindの唯一thisの目的は、あなたが. つまり、使用した関数内でキーワードが参照するbindオブジェクトのインスタンスにパラメーターとして渡します。thisbind

于 2010-01-10T04:38:08.923 に答える