Javascript Fabric.js loadFromJSON分配给自定义属性的对象未正确转换
我有一个小项目,我用箭头连接对象。我将这些箭头线指定给每个rect/组,以便在修改或将rect/组移动到不同点时更新其位置。但是,在使用序列化和loadfromjson应用undo和redo后,画布无法识别箭头线,因此无法应用setCoords() 这是我分配线的地方。sObj是起始矩形组,eObj是结束矩形组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
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”…}
,有什么区别吗?我相信,它并没有转换为实际的结构对象,而只是转换为普通对象。我卡住了