Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象没有方法';设置状态';_Javascript_Canvas_Fabricjs - Fatal编程技术网

Javascript 对象没有方法';设置状态';

Javascript 对象没有方法';设置状态';,javascript,canvas,fabricjs,Javascript,Canvas,Fabricjs,我使用canvas.toJSON()方法序列化了画布。但尝试重新创建画布时,会导致对象被重新绘制,但100%没有响应(无法拖动) 我试着聪明一点,试着通过从JSON(我下面所做的伪代码)中提取对象来逐个重画对象 这也不起作用,导致对象无法绘制,但单击画布会导致错误: TypeError:Object#没有方法“setupState” 你知道会发生什么吗 应用程序非常复杂,因此我不确定是否可以使用fiddle/plunkr 对象确实具有自定义属性,但我确保按如下方式修改toObject方法原型:

我使用
canvas.toJSON()
方法序列化了画布。但尝试重新创建画布时,会导致对象被重新绘制,但100%没有响应(无法拖动)

我试着聪明一点,试着通过从JSON(我下面所做的伪代码)中提取对象来逐个重画对象

这也不起作用,导致对象无法绘制,但单击画布会导致错误:

TypeError:Object#没有方法“setupState”

你知道会发生什么吗

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

对象确实具有自定义属性,但我确保按如下方式修改
toObject
方法原型:

    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画布格式。我会继续调查。

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

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

绘制基本体:

redrawImage:function(){
  this.canvas.add(this.image);
  for(var i = 0; i < this.primitives.length; i++){      
    this.canvas.add(this.primitives[i].geometry);
  }
}
重画图像:函数(){
this.canvas.add(this.image);
对于(var i=0;i
如果使用不同的对象类型,则必须读取每个对象的
类型
,并相应地实例化

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

干杯, 斯蒙

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);
  }
}