我创建了一个带有矩形和文本的结构组。最后我添加了一个自定义属性' name'使用以下代码对课程进行分组 我使用JSON.stringify(canvas)将画布数据序列化为JSON并将Json字符串发送到java并最终将Json字符串保存到文件中,自定义属性也随文件一起保存。
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';
Iam使用java读取同一个文件并尝试将Json加载到画布中,就像这个canvas.loadFromJSON(jsonVal)我的自定义属性一样。带有矩形和文本的Json组仅加载默认属性。
如何将Json字符串加载回画布而不会丢失自定义属性,有人可以帮助我。
答案 0 :(得分:1)
根据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);