Wyszukiwanie w witrynie

javascript - kształt kineticjs w typescript


Próbuję stworzyć kształt oparty na następującym kodzie JavaScript KineticJS:

var triangle = new Kinetic.Shape({
    drawFunc: function(canvas) {
      var context = canvas.getContext();
      context.beginPath();
      context.moveTo(200, 50);
      context.lineTo(420, 80);
      context.quadraticCurveTo(300, 100, 260, 170);
      context.closePath();
      canvas.fillStroke(this);
    },
    fill: '#00D2FF',
    stroke: 'black',
    strokeWidth: 4
  });

To jest przykład, który można znaleźć na: http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-shape-tutorial/

Mój Typescript wygląda tak:

var square = new Kinetic.Shape({
        drawFunc: (canvas: any) => {
            var ctx = canvas.getContext();
            ctx.beginPath();
            ctx.moveTo(25, 25);
            ctx.lineTo(475, 25);
            ctx.lineTo(475, 475);
            ctx.lineTo(25, 475);
            ctx.closePath();
            canvas.fillStroke(this);
        },
        fill: '#FF0000',
    });

Wygenerowany JavaScript wygląda tak:

var square = new Kinetic.Shape({
        drawFunc: function (canvas) {
            var ctx = canvas.getContext();
            ctx.beginPath();
            ctx.moveTo(25, 25);
            ctx.lineTo(475, 25);
            ctx.lineTo(475, 475);
            ctx.lineTo(25, 475);
            ctx.closePath();
            canvas.fillStroke(_this);
        },
        fill: '#FF0000'
    });

Problem występuje na linii canvas.fillStroke(_this). _this odnosi się do mojej klasy w TypeScript, a nie do wygenerowanego kształtu jak w przykładzie JavaScript. Próbowałem również zamienić canvas.fillStroke(this) w moim TypeScript na () => canvas.fillStroke(this), ale rezultat jest taki sam.

Jakieś pomysły?

Odpowiedź #1

Myślę, że po prostu musisz unikać notacji fat arrow, która celowo zachowuje bieżący kontekst this jako _this.

Więc drawFunc: (canvas: any) => { powinno być drawFunc: function(canvas:any){ itd.

Zobacz różnicę tutaj: http://bit.ly/10cpdWw

Komentarze tutaj są przydatne w odniesieniu do _this i this: http://typescript.codeplex.com/workitem/248