簡體   English   中英

創建后更改go.js portId

[英]Change go.js portId after creation

擴展“ 動態端口”示例,我在leftArray中創建了一個帶有幾個端口的節點。 每個端口均由如下模型定義:

{id: "port1"}

在端口的上下文菜單中,我讓用戶重命名它。 當前,出於測試目的,右鍵單擊端口會打開一個上下文菜單,其中包含一個按鈕:“重命名”。 單擊“重命名”會將模型的id字段更改為“ foo”:

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

使用以下命令將id字段綁定到portId屬性:

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

現在,當我創建從另一個節點到此重命名端口的鏈接,並使用myDiagram.model.toJson()觀察圖的模型時,我看到該鏈接似乎已連接到當前端口,但使用的是舊的 portId

我在這里想念什么?

謝謝

是的,您沒有修改對端口的鏈接數據引用,因此鏈接繼續被路由到相同的端口GraphObjects。 但是,如果加載了保存的模型,您會發現鏈接現在似乎已連接到其他對象,具體取決於當前使用的端口標識符。

建議您在修改端口ID之后,在連接的鏈接上進行迭代並更新端口引用。 類似於“動態端口”示例中的此額外上下文菜單按鈕:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM