从FabricJS中的组中删除/替换对象

时间:2017-08-17 14:59:59

标签: javascript fabricjs

我正在尝试从组中替换SVG(或删除并添加新的SVG),但它无法正常工作。这些是我已经尝试过的方式:

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

所以我认为这个问题可能有关系。 谢谢!

1 个答案:

答案 0 :(得分:2)

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

1)您将对象缓存作为默认值。这意味着织物将在物体发生变化时绘制物体。 你应该阅读这个,直到它有意义,如果它没有要求更好地澄清解释:

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

2)要使更改生效,您可以通过以下三种方式解决:

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

在更改后将对象标记为脏(object.set('dirty',true))

禁用objectCaching(不建议)

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

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

group.remove(svg);

group.addWithUpdate(my_new_svg);

group.moveTo(my_new_svg, 0);

说实话,看看什么不起作用,为什么会给你一个更好的答案。