2017-07-06 236 views
0

我正在动态添加节点和边缘到我的网络。 在添加它们之前,我想确保它们不在数据集中。 我不确定manipulation是这样的,当我添加节点/边缘时,我看不到那个console.logs。 http://visjs.org/docs/network/manipulation.htmlvis.js beforeAddNode处理程序

manipulation: { 
     enabled: false, 
     addNode: function (data, callback) { 
      console.log('add', data); 
      callback(data); 
     }, 
     editNode: function (data, callback) { 
      console.log('edit', data); 
      callback(data); 
     }, 
     addEdge: function (data, callback) { 
      console.log('add edge!', data); 
      callback(data); 
     } 
} 

回答

1

我添加了一个片段来向您展示如何做到这一点。

有一个布尔值,你可以改变并看到效果。

而不是这个布尔值,你可以运行你的函数来检查节点是否存在于DataSet中。

// create an array with nodes 
 
    var nodes = new vis.DataSet([ 
 
    {id: 1, label: 'Node 1'}, 
 
    {id: 2, label: 'Node 2'}, 
 
    {id: 3, label: 'Node 3'}, 
 
    {id: 4, label: 'Node 4'}, 
 
    {id: 5, label: 'Node 5'} 
 
    ]); 
 

 
    // create an array with edges 
 
    var edges = new vis.DataSet([ 
 
    {from: 1, to: 3}, 
 
    {from: 1, to: 2}, 
 
    {from: 2, to: 4}, 
 
    {from: 2, to: 5} 
 
    ]); 
 

 
    // create a network 
 
    var container = document.getElementById('mynetwork'); 
 
    var data = { 
 
    nodes: nodes, 
 
    edges: edges 
 
    }; 
 
    var options = { 
 
    manipulation: { 
 
     enabled: false, 
 
     addNode: function (data, callback) { 
 
      console.log('add', data); 
 
      var idExist = true; // you can change it to false to see addition 
 
      if(idExist){ 
 
       callback(null); 
 
       console.log('node exist!!!, not added'); 
 
      } 
 
      else{ 
 
       callback(data); 
 
      } 
 
     }, 
 
     editNode: function (data, callback) { 
 
      console.log('edit', data); 
 
      callback(data); 
 
     }, 
 
     addEdge: function (data, callback) { 
 
      console.log('add edge!', data); 
 
      callback(data); 
 
     } 
 
    } 
 
    }; 
 
    var network = new vis.Network(container, data, options); 
 
    
 
    function addNode(){ 
 
    network.enableEditMode(); 
 
    network.addNodeMode(); 
 
    console.log('click on canvas to add node!'); 
 
    } 
 

 
#mynetwork { 
 
     width: 600px; 
 
     height: 400px; 
 
     border: 1px solid lightgray; 
 
    } 
 

 
    p { 
 
     max-width: 600px; 
 
    }
<!doctype html> 
 
<html> 
 
<head> 
 
    <title>Network | Basic usage</title> 
 
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.20.0/vis.min.js"></script> 
 
    <link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.20.0/vis.min.css" rel="stylesheet" type="text/css"/> 
 
</head> 
 
<body> 
 
<button onclick="addNode()"> add node</button> 
 
<div id="mynetwork"></div> 
 

 

 

 
</body> 
 
</html>

+0

的感谢!我错过了'network.enableEditMode(); network.addNodeMode()'之前,这就是为什么不为我工作 – alfredopacino