2017-10-15 6 views
0

私はキャンバスにsvgを追加しており、カスタム要素パラメータを設定したいと思います。私はログgetActiveObject()を操作するときにカスタムパラメータを表示しますが、canvas.toJSON()を使用すると、要素のパラメータノードの値は変更されません。カスタムパラメータがキャンバスをJsonにクリア

var canvas    = new fabric.Canvas('designcontainer'), 
/* Save additional attributes in Serialization */ 
var ElementParameters = { 
    ElementType:'', 
    imageType:'', 
    top:'', 
    left:'', 
    colors:'', 
    isBaseTier:'', 
    atLevel:'' 
}; 
fabric.Object.prototype.toObject = (function (toObject) { 
return function() {   
    return fabric.util.object.extend(toObject.call(this), { 
     ElementParameters:{ 
      ElementType:'', 
      imageType:'', 
      top:'', 
      left:'', 
      colors:'', 
      isBaseTier:'', 
      atLevel:'' 
     },   
    }); 
}; 
})(fabric.Object.prototype.toObject); 
/* End : Save additional attributes in Serialization */ 

var Designer = { 
addElement: function(e,p){ /* e = element, image src | p = parameters set for image */ 
    if(p.imageType == "svg"){ 
     if(p.ElementType == "caketier"){ 
      var group = []; 
      console.log('Before '); 
      console.log(ElementParameters); 
      $.extend(ElementParameters,p); 
      console.log('After '); 
      console.log(ElementParameters); 
      fabric.loadSVGFromURL(e,function(objects,options){ 
       var shape = fabric.util.groupSVGElements(objects,options); 
       var bound = shape.getBoundingRect(); 
       shape.set({ 
        left: p.left, 
        top: p.top, 
        width:bound.width+2, 
        height:bound.height, 
        angle:0, 
        centeredScaling:true, 
        ElementParameters:ElementParameters 
       }); 

       if(shape.paths && baseColor.length > 0){ 
        for(var i = 0;i<shape.paths.length;i++) shape.paths[i].setFill(baseColor[i]); 
       } 
       canvas.add(shape); 
       shape.setControlsVisibility(HideControls); 
       canvas.renderAll(); 
      },function(item, object) { 
       object.set('id',item.getAttribute('id')); 
       group.push(object); 
      }); 
     } 
    } 
} 
} 

$(".tierbox").on('click',function(){ 
    var i  = $(this).find('img'), 
     src  = i.attr('src'), 
     param = i.data('parameters'); 
    Designer.addElement(src,param); 
}); 

ここでJSON.stringify(json)を呼び出すと、Element Parameterノードはshape.set()メソッドで設定された値で上書きされません。

+0

ガット溶液にfabric.Object.prototype.toObject =(関数(toObject){...}を交換 fabric.Object.prototype.toObject =(関数(toObject)を{置き換えます.. } にfabric.Object.prototype.toObject =(関数(toObject){ 復帰機能(){\t 戻りfabric.util.object.extend(toObject.call(本)、{ \t ElementParameters。 this.ElementParameters } ); }; })(fabric.Object.prototype.toObject); – Snehalk

答えて

0

fabric.Object.prototype.toObject = (function (toObject) { 
    return function() {   
     return fabric.util.object.extend(toObject.call(this), { 
      ElementParameters:this.ElementParameters 
     }); 
    }; 
})(fabric.Object.prototype.toObject); 
関連する問題