繁体   English   中英

JSON.stringify()无法保存对象ID结构JS

[英]JSON.stringify() Unable to save Object ID Fabric JS

我正在为组对象设置id属性

group.id = "N";
canvas.add(group);
canvas.renderAll();

现在,当我使用

JSON.stringify(canvas);

然后使用保存的Json重新加载Canvas

canvas.loadFromJSON(canvas_json , canvas.renderAll.bind(canvas) , function(o , obj)
{
    if(obj.type == 'group')
    {
       console.log('OBJ ID -'+obj.id);
    }
});

我得到OBJ ID-未定义

我检查了一些涉及子类化的解决方案,但是由于我对应用程序非常了解,因此它并不是我的最佳解决方案。

我尝试了类似的东西

fabric.Object.prototype.toObject = (function (toObject) {
return function () {
    return fabric.util.object.extend(toObject.call(this), {
        id: this.id
    });
};

但这是徒劳的。 我是否必须遍历画布中的每个对象,然后将id属性手动添加到json? 我敢肯定,有比这更好的解决方案。

在这方面的任何帮助将非常有帮助。

canvas对象( fabric.js doc )上toObject(propertiesToInclude)出函数toObject(propertiesToInclude) )。 在使用JSON.stringify进行序列化之前,应该使用此方法“导出” canvas 该函数允许您提供序列化中应包括的其他属性列表。

反序列化时,只需使用reviver函数将所需的属性从oobjobj.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
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM