2017-09-27 40 views
0

我创建了一个具有矩形和文本的织物组。最后Iam使用下面的代码将一个自定义属性“name”添加到组类中。
Iam使用JSON.stringify(canvas)将画布数据序列化为JSON,并将Json字符串发送给java,最后将Json字符串保存到文件中,自定义属性也与文件一起保存。保存并加载回画布时缺少织物js-扩展到Object方法并添加了其他属性

var rect1= createRect(104,166,250,15); 


     var text1 = new fabric.Text('hello', { left: rect1.get('left'), top: rect1.get('top'),fontSize: 13 }); 

     var group1=new fabric.Group([rect1,text1]); 

     group1.toObject = (function(toObject) { 
      return function() { 
      return fabric.util.object.extend(toObject.call(this), { 
       name: this.name 
      }); 
      }; 
     })(group1.toObject); 

     canvas.add(group1); 

     group1.name = 'New group'; 

荫使用Java和尝试负载JSON转换成这样canvas.loadFromJSON帆布读同一文件(jsonVal)我的自定义属性丢失。带有矩形和文本的Json组只能使用默认属性加载。

如何将Json字符串加载回画布而不会丢失自定义属性有人可以帮助我这个。

+0

您添加名称属性组只,而不是文本和矩形。这里没有定义其他定制属性。 – Durga

+0

是的,我已经为组对象添加了name属性。但事情是一旦将画布转换为Json字符串,并且当我尝试将相同的Json 字符串加载到画布中时,我发现我为组添加的自定义属性'name'缺失。如何将Json字符串加载到画布中而不会丢失我的用于组的自定义属性? – Shakthi

回答

0

按照Fabricjs文档https://github.com/kangax/fabric.js/wiki/Adding-additional-object-properties-to-serialized-JSON

属性应该从fabric.Object的toObject方法或 从更具体的“类”的toObject方法返回。

因此,您要么将属性添加到fabric.Object的toObject方法,要么将其添加到fabric.Group的toObject方法的 。您无法将其作为group1添加到对象,因为group1在加载时不是JSON字符串中的有效引用。

所以,这应该工作(我试了一下):

fabric.Group.prototype.toObject = (function(toObject) { 
      return function() { 
      return fabric.util.object.extend(toObject.call(this), { 
       name: this.name 
      }); 
      }; 
     })(fabric.Group.prototype.toObject); 
+0

非常感谢你:) mikkaye解决方案:) – Shakthi

+0

快乐我可以帮助Sakthi,谢谢接受答案。 – mikkaye