2017-08-17 3 views
1

Je suis en train de remplacer un fichier SVG d'un groupe (ou de le supprimer et d'en ajouter un nouveau) mais cela ne fonctionne pas. Ce sont les façons je l'ai déjà essayé:Supprimer/remplacer l'objet du groupe dans 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); 
    } 
}); 

J'utilise version 1.6.4 et cela fonctionne vraiment bien. Mais maintenant, je migre vers la dernière version 1.7.17 et j'ai ce problème.

Je remarque également que dans cette version, je ne peux pas définir une propriété directement, je serais forcé d'utiliser la méthode.

object.setTextBackgroundColor(color); // works 

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

Donc je pense que ce problème peut être lié. Merci!

Répondre

2

Il y a beaucoup de choses à prendre en compte à partir du 1.7.x.

1) vous obtenez la mise en cache des objets par défaut. Cela signifie que le tissu peindra l'objet juste quand quelque chose change. vous devriez lire ce jusqu'à ce qu'il est logique, si elle ne marche pas demander de mieux préciser les explications:

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

2) Pour appliquer les changements que vous pouvez résoudre de 3 façons:

utiliser le setter méthode que vous avez décrit (mieux dans la version .set('textBackgroundColor', color))

drapeau l'objet comme sale après les changements (object.set ('sale', vrai))

désactiver o bjectCaching (non suggérée)

3) La bonne façon de supprimer un objet d'un groupe est

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

group.remove(svg); 

group.addWithUpdate(my_new_svg); 

group.moveTo(my_new_svg, 0); 

Pour être honnête, voir ce qui ne fonctionne pas et pourquoi voudriez-vous donner une meilleure réponse.

+0

Merci @AndreaBogazzi, je peux résoudre ce problème, j'ai dû refactoriser certaines choses, mais la plupart d'entre elles étaient liées à la nouvelle façon de définir les propriétés et la mise en cache des objets! Je dois passer en revue les notes de version 1.7 !! Merci :) – mauriblint

+0

Commencez directement avec la version bêta 2.0 à ce stade si vous n'êtes pas dans un environnement de production critique. – AndreaBogazzi

+0

Ok, je vais suivre votre conseil, avez-vous dit qu'il n'y a pas de grande différence (en compatibilité) entre 1.7.X et beta 2? Merci – mauriblint