Fabric.js:不从 JSON 加载包含 SVG 的组

Fabric.js : not load groups that contain SVG from JSON

我想用 SVG 对文本进行分组,但包含 SVG 的组无法从 json 恢复,我的代码是:

let canvas = new fabric.Canvas(this.$refs.canvas);
      let waitSvgLoad = new Promise((resolve)=>{
      fabric.loadSVGFromURL(require('@/assets/img/desk.svg'), objects => {
         let obj = fabric.util.groupSVGElements(objects, {
         top: 30,
         left: 30,
       })
      resolve(obj)
      })
})
waitSvgLoad.then((svg)=>{
   let text = new fabric.Text('test', {
   left: 20,
   top: 20
    })
  let group = new fabric.Group([ text ,svg], {
  left: 150,
  top: 100,
});
canvas.add(group)
canvas.clear()
let jsontest = JSON.stringify(canvas)
canvas.loadFromJSON(jsontest)
canvas.renderAll.bind(canvas)
})

感谢 krillea...@gmail.com 在 google 组中帮助我 https://groups.google.com/g/fabricjs/c/n5ngMPSiYNs 我调试项目并确定下面的代码是问题所在:

fabric.Object.prototype.toObject = (function(toObject) {
    return function() {
       return fabric.util.object.extend(toObject.call(this), {
          selectable: this.selectable,
          hasControls: this.hasControls,
          deskId: this.deskId,
          typeShape: this.typeShape
})
}
})(fabric.Object.prototype.toObject)

事实上,自定义属性是问题所在,所以我将顶部代码替换为:

JSON.stringify(this.canvas.toJSON(['_controlsVisibility','deskId','typeShape']))

并解决了我的问题