2017-01-19 13 views
0
(function (window, $, undefined){ 

'use strict'; 


// Main canvas 
var mainCanvas = new fabric.Canvas("imageCanvas"); 


function UpdateCanvas(){ 
this.canvas = mainCanvas; 
} 

UpdateCanvas.prototype.img = function (src){ 
    this.canvas.clear(); 

    fabric.Image.fromURL(src, function(oImg) { 
    oImg.setWidth(500); 
    oImg.setHeight(400); 
    oImg.left = ((this.canvas.width/2)-(oImg.width/2)); 
    oImg.top = 50; 
    oImg.selectable = false; 
    this.canvas.add(oImg); 
    this.canvas.renderAll(); 
    }); 
} 


})(window, jQuery); 

エラー:自己呼び出し機能ファブリックプロトタイプはいけない仕事

ncaught TypeError: Cannot read property 'canvas' of undefined 
    at design-application.js:30 
    at fabric.min.js:5 
    at HTMLImageElement.i.onload (fabric.min.js:1) 

私の意図は、私のファブリック機能でプロトタイプを使用することですが、それは問題を抱えておくと、私はそれが私のキャンバス上に表示させる傾けます。私はおそらく私は自己呼び出し関数を使用していると思う。

私の変数を自己呼び出し関数に置く方法はありますし、私は自分のプロトタイプ関数布にアクセスすることができます。

答えて

0

あなたの問題は、fabric.Image.fromURL()のコールバック内で、thisUpdateCanvasと定義されていません。 How to access the correct `this` context inside a callback?を参照してください。

this JSFiddleのように、変数をthisに設定すると、コールバック関数の外に変数が設定されます。それは動作しますが、あなたに感謝

(function (window, $, undefined){ 

'use strict'; 


// Main canvas 
var mainCanvas = new fabric.Canvas("imageCanvas"); 

function UpdateCanvas(){ 
this.canvas = mainCanvas; 
} 

UpdateCanvas.prototype.img = function (src){ 
    this.canvas.clear(); 
    var that = this; 
    fabric.Image.fromURL(src, function(oImg) { 
    oImg.setWidth(500); 
    oImg.setHeight(400); 
    oImg.left = ((that.canvas.width/2)-(oImg.width/2)); 
    oImg.top = 50; 
    oImg.selectable = false; 
    that.canvas.add(oImg); 
    that.canvas.renderAll(); 
    }); 
}; 

var test = new UpdateCanvas(mainCanvas); 
test.img("https://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"); 
})(window); 
+0

:別の方法としては、異なるthis

の作業コードをバインドするために、あなたのコールバックにbindを使用することができます – user3233074

関連する問題