javascript - JSON.stringify() 无法保存对象 ID Fabric JS

标签 javascript canvas fabricjs

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

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

现在,当我使用

序列化 Canvas 时
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 -undefined

我检查了一些解决方案,其中一些涉及子类化,但由于我对应用程序的了解很深,所以这对我来说不是最佳解决方案。

我试过类似的东西

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

但这是徒劳的。我是否必须遍历 Canvas 中的每个对象并手动将 id 属性添加到 json?我相信一定有比这更好的解决方案。

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

最佳答案

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

反序列化时,您只需使用 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
    }
});

关于javascript - JSON.stringify() 无法保存对象 ID Fabric JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685794/

相关文章:

javascript - 使用正则表达式在较大字符串的开头查找字符串模式?

javascript - 如何使用 jquery 延迟对象检查元素是否在 DOM 中?

javascript - 如何获取放置在 Canvas 上的图像的点击事件

javascript - 向 fabricjs 对象添加自定义属性

php - 如何用图案填充图像

javascript - 当单击 iframe 内的按钮时,如何增加 iframe 的高度?

javascript - 如何要求选择选项用户选中单选按钮是,如果在提交表单之前在 jQuery 或 Javascript 中选中否,则需要删除

javascript - Canvas 不会在带有 cordova 和 pixi.js 的 iphone 上呈现

javascript - 更改一张 Canvas 中多个图像的颜色

javascript - FabricJS Fluid 对齐网格