2012-07-12 57 views
1

经过几次测试,我终于保存了一个fabric.canvas到一个MySQL数据库,问题是我不希望画布中的图像可以调整大小,我只需要旋转。不幸的是,存储的JSON不存储fabric.Image对象的lockScalingX和lockScalingY属性,当我检索fabric.canvas时,我可以调整图像大小。保存FabricJS不存储lockScalingX

有什么办法可以避免这种情况?

我使用的功能

var jsonCanvas = JSON.stringify(canvas.toDatalessObject()); 

使用PHP 存储JSON到一个数据库,我retrive使用

canvas.loadFromJSON(data); 

存储JSON来看看我说的是看到这个小提琴 - >http://jsfiddle.net/lpccoder/YX9Wf/1/ 我设置了oImg.lockScalingX = oImg.lockScalingY = true;之前添加到画布以避免调整大小。 按钮保存,保存画布,但当我加载它(使用加载按钮)我可以调整图像大小。

好吧,因为我没有收到任何回答,我试图在加载canvas后设置lockScalingX和lockScalingY,但是当我使用forEach方法时会发生一些奇怪的行为。我的意思是,我需要在forEach之前发出警报才能使其工作,如果我没有将此警报置于forEach循环不起作用。为了澄清这一点,你可以看到和比较这两小提琴:

工作一个 - > jsfiddle.net/lpccoder/hGPCG/

非工作一个 - > jsfiddle.net/lpccoder/Vv4AW/

我在JavaScript编码新的,也许这是一个新手问题,但我认为这是一个非常奇怪的行为...任何解决方案?

回答

1

感谢罗德里戈Pandini谁回答在https://groups.google.com/forum/#!topic/fabricjs/rGX8F93TeGE

的解决这个问题是使用回调函数手动设置的属性:

canvas.loadFromJSON(jsonCanvas, function(){ 
    var objects = canvas.getObjects(); 
    // Trying to set the property after load JSON 
    //alert('Objects: ' + objects); 
    objects.forEach(function(o) { 
    o.lockScalingX = o.lockScalingY = true; 
    }); 
    canvas.renderAll(); 
}); 

因为据我所知道的JSON没有存储这些属性。 您可以在 - >http://jsfiddle.net/lpccoder/Vv4AW/1/

+0

欢迎来到stackoverflow。请记住稍后为未来的访问者接受您的答案。 – Shahbaz 2012-07-17 13:21:36