e[i].render 不是 function fabric js

e[i].render is not a function fabric js

我正在使用撤消和重做功能,当我 undo/redo 对象的位置(z-index)发生变化时,我没有找到任何方法将 z-index 保存到 JSON (toJSON)。所以我尝试在 undo/redo 函数上设置 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);
              }
       });
}

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

我建议查看是否有其他方法获取 canvas 上的元素列表。 canvas._objects.forEach(...) 之类的东西可能会起作用。

我在 Fabric 3.6 中遇到了这种情况

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