Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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 加载fabric.JSON后位置不正确_Javascript_Json_Html5 Canvas_Fabricjs - Fatal编程技术网

Javascript 加载fabric.JSON后位置不正确

Javascript 加载fabric.JSON后位置不正确,javascript,json,html5-canvas,fabricjs,Javascript,Json,Html5 Canvas,Fabricjs,从数据库加载JSON后,即使在JSON中top和left属性的值不是0,某些对象的位置也是(0,0)。 我有一个自定义类,它具有来自MyElement对象的附加属性: var MyElement = { contextMenu: ['delete'], toObject() { return { contextMenu: this.contextMenu }; } }; var MyImage = fabric.ut

从数据库加载JSON后,即使在JSON中
top
left
属性的值不是0,某些对象的位置也是(0,0)。 我有一个自定义类,它具有来自
MyElement
对象的附加属性:

var MyElement = {
    contextMenu: ['delete'],
    toObject() {
        return {
            contextMenu: this.contextMenu
        };
    }
};
var MyImage = fabric.util.createClass(fabric.Image, MyElement, {
    type: 'MyImage',

    toObject(propertiesToInclude) {
        return this.callSuper('toObject', Object.assign(propertiesToInclude, MyElement.toObject.apply(this)));
    }
});

MyImage.fromURL = function(url, callback, imgOptions) {
    fabric.util.loadImage(url, function(img) {
        callback && callback(new MyImage(img, imgOptions));
    }, null, imgOptions && imgOptions.crossOrigin);
};

fabric.MyImage = MyImage;

fabric.MyImage.fromObject = function(object, callback) {
    fabric.util.loadImage(object.src, function(img) {
        callback && callback(new fabric.MyImage(img, object));
    });
};
数据库中的JSON如下所示:

在通过以下方式加载此JSON之后:
canvas.loadFromJSON(数据,canvas.renderal.bind(canvas))
MyImage显示在(0,0)处,而不是
top=191
left=271
,即使
console.log(instanceOfMyImage)
显示的对象表示具有
top
left
的右值。为什么?画布是否在设置属性之前渲染对象?但是图像被显示,所以属性被设置。。。
我注意到,
fabric.Image
的实例运行良好。我的实现中的错误在哪里?

我在代码中找到了解决方案和错误。我需要编写一个
initialize
方法,其签名与
fabric.Image
中的签名相同,并且可以正常工作。下面是丢失的代码:

initialize: function(element, options, callback) {
        this.callSuper('initialize', options);
        this._initElement(element, options, callback);
    },