2

以下のリンクに示すように、GOJSダイアグラムの何かリンクを実装しています

http://gojs.net/latest/samples/treeMapper.html

私の質問は、左側/右側の要素のいずれかにすでにリンクが接続されている場合、リンクの重複を許可しないことは可能ですか?

最初の回答に基づいて、以下のように nodeTemplate のコードを更新しました

 myDiagram.nodeTemplate =
              $(TreeNode,
                { movable: false },  // user cannot move an individual node
                // no Adornment: instead change panel background color by binding to Node.isSelected
                { selectionAdorned: false },
                { fromLinkable: true, toLinkable: true,fromMaxLinks: 1,toMaxLinks:1 },  // user can draw link to and from such tree nodes
                $("TreeExpanderButton",  // support expanding/collapsing subtrees
                  { width: 14, height: 14,
                    "ButtonIcon.stroke": "black",
                    "ButtonIcon.strokeWidth": 2,
                    "ButtonBorder.fill": "whitesmoke",
                    "ButtonBorder.stroke": "black",
                    "ButtonBorder.figure": "Rectangle"
                  }),
                $(go.Panel, "Horizontal",
                  { position: new go.Point(16, 0) },
                  new go.Binding("background", "isSelected", function(s) { return (s ? "lightblue" : "white"); }).ofObject(),

                  $(go.TextBlock,{ font: '9pt Verdana, sans-serif' },
                    new go.Binding("text", "Data", function(s) { return s; }))
                )  // end Horizontal Panel
              );  // end Node

注: これは単なるツリーの実装ではありません。これは、共有したリンクに示されているように、レコードのマッピング フィールドの一部として実装されたツリーです。

私が望むのは、各ポートがダイアグラムに複数のリンクを持つべきではないということだけですここに画像の説明を入力

これは、サービス パラメーターのコンテナ車であり、デバイス モデル内の他のノードへのリンクが複数あるべきではありません。同様に、デバイス モデル内のデバイスには、サービス パラメータからの複数のリンクがあってはなりません。他のすべてのノードについても同様です。

4

1 に答える 1

1

次のように述語を改善checkLinkします。 function checkLink(fn, fp, tn, tp, link) { // make sure the nodes are inside different Groups if (fn.containingGroup === null || fn.containingGroup.data.key !== -1) return false; if (tn.containingGroup === null || tn.containingGroup.data.key !== -2) return false; // optional limit to a single mapping link per node if (fn.linksConnected.any(function(l) { return l.category === "Mapping"; })) return false; if (tn.linksConnected.any(function(l) { return l.category === "Mapping"; })) return false; return true; }

そして、やみくもに true に設定するのではなく、 fromLinkableとの値についてよりスマートになるようにノード テンプレートを変更します。ツリー マッパー サンプルが使用するさまざまな種類のリンクを区別しないため、とプロパティ をわざわざ使用しないでください。toLinkable // whether the user can start drawing a link from or to this node depends on which group it's in new go.Binding("fromLinkable", "group", function(k) { return k === -1; }), new go.Binding("toLinkable", "group", function(k) { return k === -2; }), fromMaxLinkstoMaxLinks

詳細については、http: //gojs.net/latest/intro/validation.htmlおよびhttp://gojs.net/latest/intro/ports.htmlを参照してください。

于 2016-06-30T19:28:16.160 に答える