我正在使用撤消和重做功能,当我撤消/重做对象的位置(z-index)改变时,我没有发现将z-index保存到JSON(toJSON
)的任何方法。因此,我尝试在撤消/重做功能上设置z-index。
...
var jsonData = JSON.parse(config.canvasState[config.currentStateIndex+1]);
if(jsonData.objects.length){
jsonData.objects.forEach(function(e){
if(e && e.selectable === false){
canvas.sendToBack(e);
}
})
}
canvas.renderAll();
...
我收到错误e[i].render is not a function
。
解决方案
var jsonData = JSON.parse(config.canvasState[config.currentStateIndex+1]);
var imgObjs = _canvas.getObjects();
if(imgObjs.length){
imgObjs.forEach(function(e){
if(e && e.selectable === false){
_canvas.sendToBack(e);
}
});
}
答案 0 :(得分:0)
运行JSON.parse(config.canvasState[config.currentStateIndex+1]);
创建画布中所有元素实例的副本。当您在这些副本上运行.forEach
并尝试使用Fabric渲染它们时,您正在对画布中不存在的元素进行操作,因此无法调用{{1} }。
我建议您查看是否有另一种方法来获取画布上的元素列表。像sendToBack
这样的东西可能会起作用。
答案 1 :(得分:0)
这只是在 Fabric 3.6 中发生在我身上
问题是添加到结构的对象之一是 HTML 元素,而不是“结构对象”。修复引用消除了 Fabric 期望 .render() 在它是正确类型的对象时存在的问题。