2017-05-14 17 views
0

後PORTIDをgo.js、私はleftArrayでいくつかのポートを持つノードを作成しました。各ポートは次のようなモデルで定義されています。変更は<a href="http://gojs.net/latest/samples/dynamicPorts.html" rel="nofollow noreferrer">Dynamic Ports</a>の例を拡張作成

{id: "port1"} 

ポートのコンテキストメニューでは、ユーザーが名前を変更できるようにしました。現在、テスト目的で、ポートを右クリックすると、「Rename」という単一のボタンでコンテキストメニューが開きます。

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

idフィールドを使用してportIdプロパティにバインドされています:私はからのリンクを作成するときに

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

を今すぐ「foo」というのモデルのidフィールドを変更します「名前の変更」をクリックしますこれに別のノードは、ポートの名前を変更し、私はリンクがcorrentポートに接続されているように見えることがわかりmyDiagram.model.toJson()を使用しますが古いportIdを使用して、私の図のモデルを見て。

私はここで何が欠けていますか?

おかげ

答えて

1

はい、あなたはポートへのリンクデータ参照を変更しなかったので、リンクは、同じポートGraphObjectsにルーティングされ続けています。しかし、保存されたモデルをロードした場合、今使用されているポート識別子に応じて、リンクが他のオブジェクトに接続しているように見えます。

私は後に、あなたが接続されたリンクを反復処理し、ポート参照を更新ポート番号を変更することを示唆しています。 Dynamic Portsサンプルのこの特別なコンテキストメニューボタンのようなもの:

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"); }),

関連する問題

 関連する問題