我想为画布中的每个对象添加一个自定义属性。我这样做是使用:
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'])