javascript - TypescriptでのKineticJSの形状
私は次の kineticjs JavaScript コードに基づいて形を作ろうとしています:
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
});
これは以下で見つけることができるサンプルです: http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-shape-tutorial/
私のTypeScriptは次のようになります:
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',
});
生成されたJavaScriptはこのようになります:
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'
});
問題は canvas.fillStroke(_this) の行で発生します。_this は私の TypeScript クラスを参照しており、JavaScript のサンプルのように生成された形状を参照していません。また、TypeScript で canvas.fillStroke(this) を () => canvas.fillStroke(this) に置き換えてみましたが、結果は同じでした。
何かアイデアはありますか?
回答 #1
私は、あなたが単にファットアロー記法を避ける必要があると思います。これは意図的に現在の this のコンテキストを _this として保持するものです。
だから、drawFunc: (canvas: any) => { は drawFunc: function(canvas:any){ などにするべきです。
違いはここで確認してください: http://bit.ly/10cpdWw
ここでのコメントは、_this と this に関して役立ちます: http://typescript.codeplex.com/workitem/248