Gen*_*oax 2 javascript canvas fabricjs
我正在为组对象设置id属性
group.id = "N";
canvas.add(group);
canvas.renderAll();
Run Code Online (Sandbox Code Playgroud)
现在,当我使用时序列化画布
JSON.stringify(canvas);
Run Code Online (Sandbox Code Playgroud)
然后使用Json Saved重新加载Canvas
canvas.loadFromJSON(canvas_json , canvas.renderAll.bind(canvas) , function(o , obj)
{
if(obj.type == 'group')
{
console.log('OBJ ID -'+obj.id);
}
});
Run Code Online (Sandbox Code Playgroud)
我得到了OBJ ID -undefined
我检查了一些涉及子类化的解决方案,但由于我对应用程序非常深入,因此对我来说它不是最好的解决方案.
我试过类似的东西
fabric.Object.prototype.toObject = (function (toObject) {
return function () {
return fabric.util.object.extend(toObject.call(this), {
id: this.id
});
};
Run Code Online (Sandbox Code Playgroud)
但这是徒劳的.我是否必须遍历画布中的每个对象并手动将id属性添加到json?我相信必须有一个更好的解决方案.
在这方面的任何帮助将非常有帮助.
查看对象toObject(propertiesToInclude)
上的canvas
函数(fabric.js doc).canvas
在使用JSON.stringify
序列化之前,您应该使用此方法"导出" .该函数允许您提供应包含在序列化中的其他属性的列表.
反序列化时,只需使用该reviver
函数将所需属性设置o
为obj
(obj.id = o.id
).
把它们放在一起:
var canvas, group; // your canvas and group objects
group.id = 'N';
canvas.add(group)
canvas.renderAll();
var canvasJson = JSON.stringify(canvas.toObject(['id']));
canvas.loadFromJSON(canvasJson, canvas.renderAll.bind(canvas), function(jsonObject, fabricObject) {
// jsonObject is the object as represented in the canvasJson
// fabricObject is the object that fabric created from this jsonObject
if (fabricObject.type === 'group') {
fabricObject.id = jsonObject.id
}
});
Run Code Online (Sandbox Code Playgroud)