我想为画布中的每个对象添加一个自定义属性。我这样做是使用:

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


之后,将每个对象的zzz属性设置为100:

fabric.Object.prototype.zzz = 100;


之后,我在画布中放置了一个文本:

var text = new fabric.Text("time", {fill: '#999', zzz: 85, top: 50});
canvas.add(text);


然后放入SVG(通过单击按钮添加svg [可能不重要]):

fabric.loadSVGFromURL(link, function (objects, options) {
    var group = fabric.util.groupSVGElements(objects, options);
    group.set({
        ...,
        zzz: 88
    });
    canvas.add(group);
    canvas.renderAll();
});


现在,如果执行console.log(selectedObject.zzz);,则文本为85,SVG为88。一切都很好。但是...如果我这样做:

myjson = JSON.stringify(canvas);
console.log(myjson);


并加载此Json,然后console.log(selectedObject.zzz);我得到85的文本和100的SVG。但是SVG中没有zzz属性(由于fabric.Object.prototype.zzz = 100而有100),但是每个路径都具有值为100的zzz属性; (最初,当SVG具有88个路径时,路径内部没有zzz属性)。

JSON后带有SVG的图像:(无zzz属性)


json后带有SVG路径的图像:(每个路径的zzz属性)



我的问题是,如何在Json之后在SVG中具有属性zzz,并在console.log(selectedObject.zzz); 88值之后得到?该财产以某种方式丢失,但我不知道为什么。

谢谢

最佳答案

如果要对画布进行字符串化处理并保留自定义属性,则必须告诉Fabric这样做:

canvas.toJSON(['zzz'])

09-26 10:11