2017-08-17 435 views
1

我试图从组中替换SVG(或删除并添加一个新的),但它不工作。这些都是我已经尝试过的方式:从FabricJS中的组中删除/替换对象

var group = new fabric.Group([svg, text], {options}); 

canvas.remove(svg); // not working 

group.getObjects()[0] = my_new_svg; // not working 

group.forEachObject(function(o) { // not working 
    if (is_svg_object) { 
     canvas.remove(o); 
    } 
}); 

我一直在使用version 1.6.4,它的工作真的很好。但现在,我正在迁移到最新版本1.7.17并且有这个问题。

我还注意到,在这个版本中,我不能直接设置属性,我被迫使用该方法。

object.setTextBackgroundColor(color); // works 

object.textBackgroundColor = color; // works in 1.6, not in 1.7.17 

所以我想这个问题可以相关。 谢谢!

回答

2

最近在1.7.x以后需要考虑很多事情。

1)您将对象缓存设置为默认值。这意味着织物会在物体发生变化时画出物体。 你应该阅读,直到它是有道理的,如果它不要求澄清更好的解释:

http://fabricjs.com/fabric-object-caching

2)为了使更改生效,你可以在3种方式解决:

使用的setter如你描述的方法(在.set('textBackgroundColor', color)版本更好)

标志物作为变化后脏(object.set(“脏”,真))

禁用ö bjectCaching(不推荐)

3)正确的方法从组中删除的对象是

var group = new fabric.Group([svg, text], {options}); 

group.remove(svg); 

group.addWithUpdate(my_new_svg); 

group.moveTo(my_new_svg, 0); 

说实话看到什么是不工作的,以及为什么会满足你一个更好的答案。

+0

谢谢@AndreaBogazzi,我可以解决这个问题,我不得不重构一些东西,但其中大部分都与设置属性和对象缓存的新方法有关!我需要对1.7发行说明进行审查!谢谢:) – mauriblint

+0

如果你不在关键的生产环境中,直接从2.0 beta版开始。 – AndreaBogazzi

+0

好的,我会采纳你的建议,你是否说1.7.X和beta 2之间没有很大的区别(兼容性)?谢谢 – mauriblint