e [i] .render不是功能结构js

时间:2019-09-19 02:30:29

标签: javascript fabricjs

我正在使用撤消和重做功能,当我撤消/重做对象的位置(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);
              }
       });
}

2 个答案:

答案 0 :(得分:0)

运行JSON.parse(config.canvasState[config.currentStateIndex+1]);创建画布中所有元素实例的副本。当您在这些副本上运行.forEach并尝试使用Fabric渲染它们时,您正在对画布中不存在的元素进行操作,因此无法调用{{1} }。

我建议您查看是否有另一种方法来获取画布上的元素列表。像sendToBack这样的东西可能会起作用。

答案 1 :(得分:0)

这只是在 Fabric 3.6 中发生在我身上

问题是添加到结构的对象之一是 HTML 元素,而不是“结构对象”。修复引用消除了 Fabric 期望 .render() 在它是正确类型的对象时存在的问题。