Javascript Fabric.js loadFromJSON分配给自定义属性的对象未正确转换

Javascript Fabric.js loadFromJSON分配给自定义属性的对象未正确转换,javascript,fabricjs,Javascript,Fabricjs,我有一个小项目,我用箭头连接对象。我将这些箭头线指定给每个rect/组,以便在修改或将rect/组移动到不同点时更新其位置。但是,在使用序列化和loadfromjson应用undo和redo后,画布无法识别箭头线,因此无法应用setCoords() 这是我分配线的地方。sObj是起始矩形组,eObj是结束矩形组 var line = new fabric.Line([centerX1, centerY1, centerX2, centerY2], { fill: 'black', str

我有一个小项目,我用箭头连接对象。我将这些箭头线指定给每个rect/组,以便在修改或将rect/组移动到不同点时更新其位置。但是,在使用序列化和loadfromjson应用undo和redo后,画布无法识别箭头线,因此无法应用setCoords()

这是我分配线的地方。sObj是起始矩形组,eObj是结束矩形组

var line = new fabric.Line([centerX1, centerY1, centerX2, centerY2], {
  fill: 'black',
  stroke: 'black',
  strokeWidth: 1,
  selectable: false,
  evented: false,
});

mapCanvas.add(line);
line.setCoords();

let xDiff = centerX2 - centerX1;
let yDiff = centerY2 - centerY1;
var angle = Math.atan2(yDiff, xDiff);
var arrowHead = makeArrow(angle, centerX2, centerY2);

line.arrowHead = arrowHead;
mapCanvas.add(arrowHead);


//set lines 
sObj.startLines = sObj.startLines || new Array();
sObj.startLines[sObj.startLines.length] = line;

eObj.endLines = eObj.endLines || new Array();
eObj.endLines[eObj.endLines.length] = line;
形象

如果单击“撤消”,则内对象将返回到其以前的位置。 但是,如果移动它,箭头将不再跟随。

以下是我在保存和恢复时使用的方法

//saving
state = JSON.stringify(mapCanvas.toJSON(["typeName", "data",
 "arrowHead", "startLines", "endLines"]));

//restore
mapCanvas.clear();
mapCanvas.loadFromJSON(state, function() {
  mapCanvas.renderAll.bind(mapCanvas);
}, function() {
  console.log(state);
});

这就是错误所在

if (rectGroup.endLines) {
  rectGroup.endLines.forEach(function(el) {
    el.setCoords();

    //[from console] Uncaught TypeError: el.setCoords is not a function

    let xDiff = centerX - el.x1;
    let yDiff = centerY - el.y1;
    var angle = (Math.atan2(yDiff, xDiff) * 180 / Math.PI) + 90;

    el.set("x2", centerX).set('y2', centerY);

    el.arrowHead.set("left", centerX).set('top', centerY);
    el.arrowHead.set("angle", angle);
    el.setCoords();
  });
}


您的代码片段已损坏,请修复它。@ArvindMaurya我在这里使用的代码片段只是片段。它太长了,无法粘贴到这里,很抱歉,这是我第一次发布一个问题检查
el
@Durga的值在将其指定为rectGroup的结束行时,它看起来像
I{fill:“black”,dirty:false,stroke:“black”…}
。然而,在从json加载它时,它会变成
{type:“line”,version:“3.4.0”,originX:“left”…}
,有什么区别吗?我相信,它并没有转换为实际的结构对象,而只是转换为普通对象。我很抱歉,您的代码片段已损坏,请修复它。@ArvindMaurya我在这里使用的代码片段只是片段。它太长了,无法粘贴到这里,很抱歉,这是我第一次发布一个问题检查
el
@Durga的值在将其指定为rectGroup的结束行时,它看起来像
I{fill:“black”,dirty:false,stroke:“black”…}
。然而,在从json加载它时,它会变成
{type:“line”,version:“3.4.0”,originX:“left”…}
,有什么区别吗?我相信,它并没有转换为实际的结构对象,而只是转换为普通对象。我卡住了