gpt4 book ai didi

javascript - 创建后更改gojs端口Id

转载 作者:行者123 更新时间:2023-12-03 04:20:40 27 4
gpt4 key购买 nike

扩展Dynamic Ports例如,我在 leftArray 中创建了一个带有几个端口的节点。每个端口都由如下模型定义:

{id: "port1"}

在端口的上下文菜单中,我让用户重命名它。目前,出于测试目的,右键单击端口会打开一个带有单个按钮的上下文菜单:“重命名”。单击“重命名”会将模型的 id 字段更改为“foo”:

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

id 字段使用以下方式绑定(bind)到 portId 属性:

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

现在,当我创建从另一个节点到此重命名端口的链接并使用 myDiagram.model.toJson() 观看图表模型时,我发现该链接似乎已连接到相应的端口端口但使用portId

我在这里想念什么?

谢谢

最佳答案

是的,您没有修改对端口的链接数据引用,因此链接继续路由到同一端口 GraphObjects。但是,如果您加载保存的模型,您会发现链接现在似乎连接到其他对象,具体取决于现在使用的端口标识符。

我建议您修改端口 ID 后,迭代连接的链接并更新端口引用。类似动态端口示例中的额外上下文菜单按钮:


makeButton("重命名端口",
函数(e,obj){
var port = obj.part.adornedObject;
var 节点 = port.part;
var data = 端口.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");
//找到一个新的唯一端口标识符
var newpid = Math.floor(Math.random() * 1000000).toString();
while (node.findPort(newpid) !== node.port) {
newpid = Math.floor(Math.random() * 1000000).toString();
}
//改变端口标识符
myDiagram.model.setDataProperty(data, "portId", newpid);
//更改对端口的连接链接引用
linksinto.each(函数(l) {
myDiagram.model.setToPortIdForLinkData(l.data, newpid);
});
linksoutof.each(函数(l) {
myDiagram.model.setFromPortIdForLinkData(l.data, newpid);
});
myDiagram.commitTransaction("portId");
}),

关于javascript - 创建后更改gojs端口Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43962895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com