2017-09-07 1 views
0

J'essaie d'obtenir l'ombre Image de l'objet Texte sans affecter la sortie de tissu.fabricjs objet cloné affectent l'ancien objet (par défaut)

code

var clonedText = jQuery.extend({}, obj); 
clonedText.fill = "rgba(50,50,50,0.5)"; 
imageURL = clonedText.toDataURL({format:'png'}); 

Résultat

Par défaut: enter image description here marche par inertie: enter image description here

Comment peut-il être résolu? Je veux dire comment puis-je copier un objet afin de ne pas affecter l'image par défaut?

MISE À JOUR:

J'ai aussi essayé ceci et cela.

canvas._objects.forEach(function(obj, index){ 
var clonedText = fabric.util.object.clone(obj); 
    clonedText.fill = "rgba(50,50,50,0.5)"; 
    imageURL = clonedText.toDataURL({format:'png'}); 
}); 

Ceci a le même résultat.

+0

version de fabricjs que vous utilisez? – Durga

+0

@AndreaBogazzi pouvez-vous vérifier cette [question] (https://jsfiddle.net/durga598/qn066wtz/) après avoir obtenu 'toDataURL' d'un objet cloné, il affecte également à l'élément parent, après la mise à l'échelle il revient à l'original. – Durga

Répondre

2

Donc vous ne devriez pas vraiment cloner des instances comme vous cloneriez des objets javascript. Les objets de structure peuvent avoir des références à des éléments de canevas, à des éléments d'image, à des structures profondes, et chaque logique de clone fonctionne seule.

sur fabricjs docs est spécifié que fabric.util.object.extende/clone ne les objets de non clones:

http://fabricjs.com/docs/fabric.util.object.html

également dans la documentation est spécifié la méthode clone: ​​

enter image description here

donc, vous devez exécuter

myText.clone(function(cloned) { 
    // do something with cloned.... 
}); 

Si vous avez besoin d'un processus complet syncronous, et vous n'utilisez pas des modèles ou des sources d'images pour le texte, vous pouvez également faire:

var objectForm = myText.toObject(); 
var clonedText = new fabric.Text(objectForm.text, objectForm); 
+0

Oui, tout à fait raison. –