2017-08-17 46 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