javascript - 对象没有方法 'setupState'

标签 javascript canvas fabricjs

我使用 canvas.toJSON() 序列化了我的 Canvas 方法。但是尝试重新创建我的 Canvas ,导致对象被重新绘制,但 100% 无响应(无法四处拖动)。

我试图变得聪明,并尝试通过从 JSON 中提取对象来逐一重绘对象(我在下面所做的伪代码)。

forEach(jsonRepresentation.objects, function (obj) {
            canvas.add(obj);
}
canvas.renderAll();

这也不起作用并导致对象不绘制,但单击 CANVAS 会导致错误:

TypeError: Object #<Object> has no method 'setupState'

知道会发生什么吗?

应用程序非常复杂,所以我不确定是否可以使用 fiddle/plunkr。

对象确实有自定义属性,但我确保修改了 toObject方法原型(prototype)如下:

    fabric.Object.prototype.toObject = (function (toObject) {
      return function () {
        return fabric.util.object.extend(toObject.call(this), {
          customAttribute1: this.customAttribute1,
          ...
        });
      };
    })(fabric.Object.prototype.toObject)

为了持久化这些属性(它们是在手动扫描生成的 JSON 之后)。

更新:

我注意到问题的出现是因为我的很多对象内部都有对象,这些对象没有被递归解析为 FabricJS Canvas 格式。我会继续调查。

最佳答案

我刚刚遇到了类似的问题。在我的应用程序中,我不想保存完整的 Canvas ,而只想保存用户添加的一些对象。对象的方法不在 JSON 中表示,只是变量(widthheight,...) - 所以当试图在 Canvas 中重绘对象时,我(可能你也是)得到了提到的错误。

我通过基于那些使其成为 JSON 表示的变量重新创建对象来解决这个问题。在我的应用程序中,除了一些附加数据(idmetadata)之外,FabricJS 数据还存储为 geometry

for(var primitiveKey in data[0].value.primitives){
  var currentPrimitive = data[0].value.primitives[primitiveKey];
  var reassembledPrimitive = [];

  reassembledPrimitive.id = currentPrimitive.id;
  reassembledPrimitive.metadata = currentPrimitive.metadata;
  reassembledPrimitive.geometry = new Fabric.Rect(currentPrimitive.geometry);
  this.primitiveList.push(reassembledPrimitive);
}

绘制图元:

redrawImage:function(){
  this.canvas.add(this.image);
  for(var i = 0; i < this.primitives.length; i++){      
    this.canvas.add(this.primitives[i].geometry);
  }
}

如果使用不同的对象类型,您必须读取每个对象的类型并相应地实例化。

解决方案不是很好,如果您已经找到另一个更好的解决方案,请告诉我。

干杯, 斯蒙

关于javascript - 对象没有方法 'setupState',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22876522/

相关文章:

javascript - 在 Opera 中使用 jquery 为元素分配动态光标样式

canvas - 相当于 React Native 中的 "canvas"

c# - Scrollviewer 中的 UWP Canvas 像鼠标输入一样处理笔输入

javascript - Fabric .js : Get text bounding box width and height

javascript - ES6 中类的引入如何改变对象创建?像 React 这样使用类的框架又如何呢?

javascript - AWS 认知 : Generate token and after refresh it with amazon-cognito-identity-js SDK

javascript - 一张 Canvas ,两个 dom 元素?

javascript - 无法在 Fabric Js 中按线路连接端点

javascript - 在覆盖图像下绘制新路径

javascript - 使用 sendGrids @sendgrid/mail npm 库进行点击跟踪