我正在尝试从组中替换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
所以我认为这个问题可能有关系。 谢谢!
答案 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);
说实话,看看什么不起作用,为什么会给你一个更好的答案。