2017-11-22 18 views
1

ハイパーリンクをエッジで処理することは可能ですか?このオプションvis.jsハイパーリンクとエッジ

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

を 使用している場合

例は、私が接続されている2つのノードを持つ、そして

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

したがって、上記のためにそれらのラベルを持って、urlはノードのために働きます標準的な設定を使用して2つのノードの間にリンクがあります

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

2つのノードを結ぶ線/辺で作業するためのハイパーリンクを得ることは可能ですか?

答えて

1

基本的に、コード内の「ノード」を「エッジ」に変更すると、エッジが選択されたときにURLが開きます。しかし、ノードを選択すると、隣接するすべてのエッジも選択されます。あなたはただ1つの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');     
    } 
}); 

はまだ問題がありますため、「選択」を使用するにはこの。以前にノードを選択した場合は、上のチェックのために表示されていない場合でも、隣接するエッジが選択されます。それらの隣接するエッジの1つをクリックすると、そのエッジがすでに選択されているため、コールバックを取得しません。代わりに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'); 
     }   
    } 
}); 
関連する問題