在保存并加载回画布时,缺少fabric js-扩展toObject方法并添加了附加属性

时间:2017-09-27 06:47:50

标签: json canvas fabricjs

我创建了一个带有矩形和文本的结构组。最后我添加了一个自定义属性' name'使用以下代码对课程进行分组     我使用JSON.stringify(canvas)将画布数据序列化为JSON并将Json字符串发送到java并最终将Json字符串保存到文件中,自定义属性也随文件一起保存。

    var rect1= createRect(104,166,250,15);


        var text1 = new fabric.Text('hello', { left: rect1.get('left'), top: rect1.get('top'),fontSize: 13 });

        var group1=new fabric.Group([rect1,text1]);

        group1.toObject = (function(toObject) {
          return function() {
            return fabric.util.object.extend(toObject.call(this), {
              name: this.name
            });
          };
        })(group1.toObject);

        canvas.add(group1);

        group1.name = 'New group';

Iam使用java读取同一个文件并尝试将Json加载到画布中,就像这个canvas.loadFromJSON(jsonVal)我的自定义属性一样。带有矩形和文本的Json组仅加载默认属性。

如何将Json字符串加载回画布而不会丢失自定义属性,有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

根据Fabricjs文档https://github.com/kangax/fabric.js/wiki/Adding-additional-object-properties-to-serialized-JSON

  

应该从fabric.Object或的toObject方法返回属性   来自toObject方法的更具体的“类”。

因此,您要么将属性添加到fabric.Object的toObject方法,要么将其添加到      fabric.Group的toObject方法。您不能将其作为group1添加到对象,因为group1在加载时不是JSON字符串中的有效引用。

所以,这应该有用(我试过了):

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