3

是否有可能获得在边缘工作的超链接?

例如,我有两个连接的节点,并且有一个标签

{ id: 1601, label: 'label', x: -1085, y: -429, url: 'link' },

因此,对于上述情况,使用此选项时,该 url 适用于节点

network.on("selectNode", function (params) {
    if (params.nodes.length === 1) {
        var node = nodes.get(params.nodes[0]);
        window.open(node.url, '_blank');
    }
});

现在我使用标准配置在两个节点之间建立了链接

{ from: 1600, to: 1613, label: "label value" },

是否可以让超链接在连接两个节点的线路/边缘上工作?

4

1 回答 1

4

基本上,在您的代码中将“节点”更改为“边缘”可以在选择边缘时打开 url。但是,选择一个节点也会导致选择所有相邻的边。你只会得到一个selectEdge回调,但无论如何都可能想忽略它。如果您想排除有人选择了节点的情况,其中恰好只有一个连接的边,然后添加一个检查,如下所示:

network.on("selectEdge", function(params) {     
    if ((params.edges.length == 1) && (params.nodes.length == 0)) {
        var edgeId = params.edges[0];
         window.open(edges.get(edgeId).url, '_blank');                  
    } 
});

为此使用“选择”仍然存在问题。如果您之前已经选择了一个节点,那么即使您因为上面的检查而没有看到它,也会选择相邻的边。如果您随后单击这些相邻边之一,则不会收到回调,因为该边已被选中。改用该network.on("click" ... )方法可能会更好:

network.on("click", function(params) {                              
    if (params.nodes.length == 1) {
        var nodeId = params.nodes[0];
        if (nodes.get(nodeId).url != null) {
            window.open(nodes.get(nodeId).url, '_blank');
        }           
    } else if (params.edges.length==1) {
        var edgeId = params.edges[0];       
        if (edges.get(edgeId).url != null) {
            window.open(edges.get(edgeId).url, '_blank');
        }           
    } 
});
于 2017-11-22T22:26:28.277 回答