0

クリック イベント内で typescript クラスのインスタンスを取得できないようです。

TypeScript クラスがありNavigationます。

class Navigation
{
    currentPage: number;

    wireMouseEvents()
     {
        this.buttonPrevious.on("click", function(): void {
            if (this.currentPage > 1)
            {
                // do more work with Navigation objects
            }
        });
    }
}

そして、これが結果の JavaScript です。

Navigation.prototype.wireMouseEvents = function () {
    var _this = this;
    this.buttonPrevious.on("click", function () {
        if(_this.currentPage > 1) {
            // do more work with Navigation objects

        }
    });
};

イベントは発生しますが、currentPage未定義です。デバッガーのクリックイベントで「this」を見ると、それはKinetic.Textオブジェクトです。

クリック ハンドラーのスコープが自分のクラスであることを確認するにはどうすればよいNavigationですか?

4

1 に答える 1

0

投稿した Typescript は、投稿した JavaScript にコンパイルされません。etc. はレキシカル スコープを維持するためにthis.buttonPrevious.on("click", function(): void {生成されません。_thisそうするだけthis.buttonPrevious.on("click", () => {です。ここを参照してください。

スコープを維持するには、太い矢印関数を使用する必要があります。

class NavigationWithFatArrow
{
    currentPage: number;

    wireMouseEvents()
     {
        this.buttonPrevious.on("click", () => {
            if (this.currentPage > 1)
            {
                // do more work with Navigation objects
            }
        });
    }
}

常に正しい「this」を取得できるように、コンストラクターでバインディングを試す必要がある場合もあります。ここで Ryan Cavanaugh の回答を参照してください: https://stackoverflow.com/a/16029714/1014822

于 2013-05-14T07:32:59.307 に答える