2016-09-01 10 views
0

新しいfabric.MyObjectを作成したいだけですが、それは単にfabric.Objectですが、いくつかの特殊な小道具と方法があります。だからinitializefabric.Objectに呼び出しても問題ないです。fabric.MyObjectを作成しています。fabricJSオブジェクトで複数の継承を実現するにはどうすればよいですか?

MyRectMyCircleなどのような特殊な形状を持っていて、それはMyObjectから継承する必要があります。これは、そのスペシャルを共有する必要があります。

私はfabric.Rectから継承し、またfabric.RectようMyObjectの小道具を使用するだけでfabric.Objectから継承(と私は「普通の」rectsを必要とするかもしれないと私はそれを変更したくないたとえばMyRectのために作る方法についてstruggelingよ同じように)。

いくつかのヒントをいただければ幸いです:)

var canvas = new fabric.Canvas("c"); 
 

 
//create new object that has some defaults changed 
 
fabric.MyObject = fabric.util.createClass(fabric.Object, { 
 
    type: "myObject", 
 
    
 
    initialize: function (options) { 
 
    \t this.callSuper("initialize", fabric.util.object.extend({ 
 
    \t  hasControls: true, 
 
      cornerColor: "black", 
 
      transparentCorners: false, 
 
      hasBorders: false, 
 
      fill: "rgba(255,0,0,.5)", 
 
      stroke: "black", 
 
      perPixelTargetFind: true 
 
     }, options)); 
 
    } 
 
}); 
 

 
//create new rect that builds up on the custom MyObject 
 
fabric.MyRect = fabric.util.createClass(fabric.Rect, { 
 
    type: "myRect", 
 
\t 
 
    initialize: function (options) { 
 
    \t //how can I make it work that fabric.Rect is not using fabric.Object but fabric.MyObject instead? 
 
     this.callSuper("initialize", options); 
 
    } 
 
}); 
 

 
//creates just a "normal" rect 
 
canvas.add(new fabric.MyRect({ 
 
    left: 100, 
 
    top: 100, 
 
    width: 100, 
 
    height: 100 
 
}));
canvas { 
 
    border: 1px solid; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.4/fabric.min.js"></script> 
 
<canvas id="c" width="400" height="300"></canvas>

答えて

2

私はこれを行うための簡単な方法があるとは思いません。 Rectはfabric.util.createClassfabric.Objectを呼び出します。

値をfabric.Objectに上書きするか、デフォルトの束を使ってオブジェクトを作成し、すべてfabric.MyRectfabric.MyCircleクラスに渡します。

あなたが提案していることを実行できれば面白いでしょう。それはおそらくfeature you could propose to fabricjs directlyです。

+0

実際にこれを行う方法が実際にない場合は、githubで確認します。 – Fidel90

+0

また、クラス作成ファイルをレポのRectからコピーして、代わりに独自のオブジェクトクラスに渡すこともできます。私たちは、私たちのプロジェクトでこれほどのことをしました。 – StefanHayden

関連する問題