2017-05-14 6 views
0

En prolongeant l'exemple Dynamic Ports, j'ai créé un nœud avec quelques ports dans le leftArray. Chaque port est défini par un modèle comme celui-ci:Modifier go.js portId après la création

{id: "port1"} 

Dans le menu contextuel du port, je laisse l'utilisateur renommer. Actuellement, à des fins de test, un clic droit sur un port ouvre un menu contextuel avec un seul bouton: "Renommer". En cliquant sur « Renommer » va changer le champ id du modèle à « foo »:

function(e, obj) { 
    obj.part.data.id = "foo"; 
} 

Le champ id est lié à la propriété portId utilisant:

new go.Binding("portId", "id").makeTwoWay() 

Maintenant, quand je crée un lien de un autre noeud à ce port renommé et regarder le modèle de mon diagramme en utilisant myDiagram.model.toJson() Je vois que le lien semble être connecté au port corrent, mais en utilisant le vieuxportId.

Qu'est-ce qui me manque ici?

Merci

Répondre

1

Oui, vous ne modifiaient pas les références de données de liaison avec les ports, de sorte que les liens continuent d'être acheminés vers les mêmes GraphObjects port. Mais si vous chargiez le modèle enregistré, vous verriez que les liens semblent maintenant se connecter à d'autres objets, en fonction des identifiants de port actuellement utilisés.

Je suggère qu'après avoir modifié l'ID de port que vous parcourez sur les liens connectés et mettre à jour les références de port. Quelque chose comme ce bouton de menu contextuel supplémentaire dans l'exemple Ports dynamiques:

makeButton("Rename port", function(e, obj) { var port = obj.part.adornedObject; var node = port.part; var data = port.data; var oldpid = data.portId; var linksinto = new go.List().addAll(node.findLinksInto(oldpid)); var linksoutof = new go.List().addAll(node.findLinksOutOf(oldpid)); myDiagram.startTransaction("portId"); // find a new unique port identifier var newpid = Math.floor(Math.random() * 1000000).toString(); while (node.findPort(newpid) !== node.port) { newpid = Math.floor(Math.random() * 1000000).toString(); } // change port identifier myDiagram.model.setDataProperty(data, "portId", newpid); // change connected link references to ports linksinto.each(function(l) { myDiagram.model.setToPortIdForLinkData(l.data, newpid); }); linksoutof.each(function(l) { myDiagram.model.setFromPortIdForLinkData(l.data, newpid); }); myDiagram.commitTransaction("portId"); }),