Javascript 如何向fabricjs对象添加名称?

Javascript 如何向fabricjs对象添加名称?,javascript,canvas,fabricjs,Javascript,Canvas,Fabricjs,为了按名称获取fabricjs画布图像,我需要将唯一id或名称设置为该图像。我创建了一个新类fabric.NamedImage 我就是这样做的 fabric.NamedImage = fabric.util.createClass(fabric.Image, { type: 'nameimage', initialize: function (element, options) { this.callSuper('initialize', element, optio

为了按名称获取fabricjs画布图像,我需要将唯一id或名称设置为该图像。我创建了一个新类
fabric.NamedImage
我就是这样做的

  fabric.NamedImage = fabric.util.createClass(fabric.Image, {

  type: 'nameimage',

  initialize: function (element, options) {
      this.callSuper('initialize', element, options);
      options && this.set('name', options.name);
  },

  toObject: function () {
      return fabric.util.object.extend(this.callSuper('toObject'), { name: this.name });
  },

  _render: function (ctx) {
      this.callSuper('_render', ctx);
  }}); 
和fromObject

 fabric.NamedImage.fromObject = function (object, callback) {
      fabric.util.loadImage(object.src, function (img) {
          var instance = new fabric.NamedImage(img, object);
          callback && callback(instance);
      });
  };
  fabric.NamedImage.async = true;
但由于某些原因,当我试图加载canvas
loadFromJSON
时,我总是会出错

cannot read property 'async' of undefined
下面是我试图加载JSON的代码

for (i = 0; i <= canvas.length; i++) {
                    JSON.parse(imageQuery[i]);
                canvas[i].loadFromJSON(imageQuery[i]);
                        canvas[i].renderAll();
                        console.log(' this is a callback. invoked when canvas is loaded!xxx ');              
            }

for(i=0;i请将类的type属性更改为'namedImage',它应该会消失。

您可以使用下面给出的代码向fabric js中的不同对象添加自定义属性:

obj.toObject = (function (toObject) {
    return function () {
        return fabric.util.object.extend(toObject.call(this),{
            id : value
        });
    };
})(obj.toObject);
这里obj是您创建的画布对象,
id
是我们添加到此对象的自定义属性。 假设您已经以JSON文件的形式保存了画布,所以在使用JSON时,StrugTimes考虑下面的代码:

json_data = JSON.stringify(self.canvas.toJSON(['attribute1', 
'attrubute2']));

方括号中包含所有自定义属性。稍后当您使用loadfromjson时,所有自定义属性都将自动包含。希望一切正常。祝您愉快!!

来自官方文档

var rect = new fabric.Rect();

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

canvas.add(rect);

rect.name = 'trololo';

console.log(JSON.stringify(canvas));
并且记录的输出将是

'{"objects":[{"type":"rect","left":0,"top":0,"width":0,"height":0,"fill":"rgb(0,0,0)","overlayFill":null,"stroke":null,"strokeWidth":1,"strokeDashArray":null,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,"selectable":true,"hasControls":true,"hasBorders":true,"hasRotatingPoint":false,"transparentCorners":true,"perPixelTargetFind":false,"rx":0,"ry":0,"name":"trololo"}],"background":"rgba(0, 0, 0, 0)"}'
请参考这个
干杯!

仍然无法处理相同的错误。我已将“nameimage”更改为“namedImage”