javascript - forma de KineticJS en TypeScript
Estoy intentando crear una forma basada en el siguiente código de JavaScript de 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
});
Este es un ejemplo que se puede encontrar en: http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-shape-tutorial/
Mi TypeScript se ve así:
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',
});
El JavaScript generado se ve así:
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'
});
El problema ocurre en la línea canvas.fillStroke(_this). El _this está haciendo referencia a mi clase de TypeScript y no a la forma generada como en el ejemplo de JavaScript. También intenté reemplazar canvas.fillStroke(this) en mi TypeScript con () => canvas.fillStroke(this), pero el resultado es el mismo.
¿Alguna idea?
Respuesta #1
Creo que solo necesitas evitar la notación de flecha gorda, que deliberadamente preserva el contexto actual de this como _this.
Entonces drawFunc: (canvas: any) => { debería ser drawFunc: function(canvas:any){ etc.
Vea la diferencia aquí: http://bit.ly/10cpdWw
Los comentarios aquí son útiles con respecto a _this y this: http://typescript.codeplex.com/workitem/248