3

jQuery イベント内にいる場合、クラス変数にアクセスする方法がわかりません。以下の例

// <reference path="../typings/jquery/jquery.d.ts" />

export class Notes {

    // I want to access this inside of the click event
    test = "test";

    foo() {
        //works here
        alert(this.test);

        $("#testDiv").click(function () {

            // context of this changes so this no longer works
            alert(this.test);

            // How do I access the test variable in here?
        })
    }
}
4

2 に答える 2

6

ラムダ式を使用するthisと、外側のスコープの にバインドされthisます。

export class Notes {
    private test: string = "test";

    foo() {
        //works here
        alert(this.test);

        $("#testDiv").click(() => {
            alert(this.test);
        })
    }
}

に翻訳されます

var Notes = (function () {
    function Notes() {
        this.test = "test";
    }
    Notes.prototype.foo = function () {
        var _this = this;
        alert(this.test);
        $("#testDiv").click(function () {
            alert(_this.test);
        });
    };
    return Notes;
})();
exports.Notes = Notes;

ただし、jQuery コールバック内では DOMElementthisが変換されるため、期待どおりにアクセスできないことに注意してください。両方を実行できるようにしたい場合thisは、クロージャーの変数に自分で追加します。

export class Notes {
    private test: string = "test";

    foo() {
        alert(this.test);
        var self = this;
        $("#testDiv").click(function() {
            alert(self.test);
            $(this).hide(); // still works
        })
    }
}
于 2013-05-08T17:17:13.720 に答える
3

うまくいく方法を見つけましたが、おそらくもっと良い方法があると思いますか?

export class Notes {
    test = "test";

    foo() {
        var self = this;

        $("#testDiv").click(function () {
            alert(self.test);
        })
    }
}
于 2013-05-08T17:14:49.430 に答える