vis.js beforeAddNode 处理程序

vis.js beforeAddNode handler

我正在向我的网络动态添加节点和边。 在添加它们之前,我想确保它们尚未出现在数据集中。 我不确定 manipulation 是否正确,当我添加 nodes/edges 时我看不到 console.logs。 http://visjs.org/docs/network/manipulation.html

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

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

那里有一个布尔值,您可以更改并查看效果。

您可以 运行 用于检查数据集中是否存在节点的函数,而不是此布尔值。

// 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>