在 fabricjs 对象上应用 JSON.stringify 后自定义属性丢失

Posted

技术标签:

【中文标题】在 fabricjs 对象上应用 JSON.stringify 后自定义属性丢失【英文标题】:Custom attributes lost after applying JSON.stringify on fabricjs object 【发布时间】:2021-06-12 13:27:48 【问题描述】:

我正在向我的织物对象添加自定义属性,如下所示,它可以正常工作,但是当使用 JSON.stringify 将对象转换为字符串时,它不会转换我添加的属性

var customcanva = new fabric.Canvas('c');

// my text object with custom attribute
text = new fabric.IText('Tap and Type', 
    attr0: 'value 0',
);

// with another custom attribute
text.attr1 = "value 1";

// object showing fine as json object 
console.log(text);

// stringified object doesn't have all attributes including my added ones
console.log(JSON.stringify(text));

我这样做是为了可以通过 ajax 请求发送我选择的对象。如何使我的属性保持不变?

【问题讨论】:

【参考方案1】:

当使用自定义属性序列化 FabricJS 对象时,toJSON() 方法接受附加属性数组。

var text = new fabric.IText('Tap and Type');
    text.attr1 = 'red';
    text.attr2 = 'blue';

//pass an array of attribute names to the toJSON method
var json = text.toJSON(['attr1', 'attr2']);

//the output can then be stringified
var jsonString = JSON.stringify(json);

请参阅此处获取文档: http://fabricjs.com/docs/fabric.Object.html#toJSON

【讨论】:

【参考方案2】:

我找到了解决方案,这就是我所做的。我将我的织物对象转换为一个新的 json 变量并将我的属性添加到它,如下所示:


text = new fabric.IText('Tap and Type');

// my new object
var newtext = text.toJSON();

// adding my attribute
newtext.attr1 = "value 1";

// object showing fine as json object 
console.log(newtext);

// stringified object showing with my added attributes
console.log(JSON.stringify(newtext));

【讨论】:

以上是关于在 fabricjs 对象上应用 JSON.stringify 后自定义属性丢失的主要内容,如果未能解决你的问题,请参考以下文章

FabricJS:始终在画布上居中对象

集成 Fabricjs 和 Angularjs

在 FabricJS 画布上拖放和删除对象

FabricJS动画:鼠标:向上和:向下期间画布上的选定对象

如何在fabricJS中向圆形对象添加文本?

Fabricjs根据内部对象的对象边界矩形上的鼠标位置进行选择或悬停