4

当我将此画布转换为 JSON 并重新加载它时,我的画布包含对象centeredRotation:true和其他对象。selectable:false这些对象具有它们的默认属性。即没有中心旋转和对象是可选择的。我可以知道为什么会这样吗?显然,像 centeredRotation、selectable 这样的属性不包含在 JSON 中。

{"type":"rect","originX":"left","originY":"top","left":92,"top":53,"width":150,"height":150," fill":"#778899","stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX ":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":0.4,"shadow":null,"visible":true,"clipTo": null,"backgroundColor":"","rx":0,"ry":0,"x":0,"y":0}],"background":""}

加载对象时如何设置这些?

4

2 回答 2

12

您需要在以下期间包括它们toJSON

canvas.toJSON([ 'centeredRotation', 'selectable' ]);

请参阅描述此“propertiesToInclude”参数的文档并提供一些示例。toJSON

于 2013-10-18T17:51:40.043 回答
0

您还可以在创建新对象之前在主对象上指定它。这保证了我下次从 json 加载对象时,可选择项将保存在“toObject”/“toJSON”函数中。

// Add 'selectable' to every object via the main class "Object"
fabric.Object.prototype.toObject = (function (toObject) {
    return function () {
        return fabric.util.object.extend(toObject.call(this), {
            selectable: this.selectable
        });
    };
})(fabric.Object.prototype.toObject);

我不明白为什么默认情况下不存在,但我想这是因为它更像是一种状态而不是一种属性?

于 2014-07-12T23:42:32.903 回答