javascript - Scena nu se actualizează cu window.onresize în TypeScript (0.9.1.1)


Am clasa Renderer care desenează pe canvas-ul HTML5 și vreau să refac desenul atunci când fereastra este redimensionată. Problema este că codul update() se execută o singură dată - în interiorul initialize() - și redimensionarea ferestrei nu face nimic. Pe de altă parte, onWindowResized() se execută de fiecare dată când fereastra este redimensionată. Deci, unde este greșeala?

/// <reference path="../lib/easeljs.d.ts" />
/// <reference path="../lib/tweenjs.d.ts" />
/// <reference path="../lib/soundjs.d.ts" />
/// <reference path="../lib/preloadjs.d.ts" />

class Renderer
{
    private mStage:createjs.Stage;
    private mShape:createjs.Shape;

    public initialize (stage:createjs.Stage):void
    {
        this.mStage = stage;
        this.mStage.autoClear = true;
        this.update ();

        window.onresize = this.onWindowResized;
    }

    public update ():void
    {
        if (this.mStage)
        {
            this.mStage.canvas.width = window.innerWidth;
            this.mStage.canvas.height = window.innerHeight;

            this.mShape = new createjs.Shape();
            this.mShape.graphics.beginFill("#dddddd");
            this.mShape.graphics.drawRect(0, 0, this.mStage.canvas.width, this.mStage.canvas.height);
            this.mShape.graphics.beginFill("#ff4400");
            this.mShape.graphics.drawCircle(this.mStage.canvas.width / 2, this.mStage.canvas.height / 2, 25);

            this.mStage.addChild(this.mShape);
            this.mStage.update();
        }
    }

    private onWindowResized (event:UIEvent):void
    {
        this.update();
    }
}

Răspuns #1

Problema pe care o vei avea aici este că atunci când evenimentul se execută, acesta va fi în contextul evenimentului (fereastra pentru redimensionare, elementul DOM pentru click, mouse over-uri etc.), nu al clasei tale - așadar this nu va fi un handle al clasei tale.

Poți rezolva asta folosind...

window.onresize = this.onWindowResized.bind(this);

Acesta este un caz în care bind este mai elegant decât sintaxa săgeată grasă.