Не могу создать узлы в visjs, ID уже существует - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь создать сеть на VISJS.Однако всякий раз, когда я добираюсь до

else if (version.slice(-7).toUpperCase() == 'DEFAULT')

, я получаю сообщение о том, что идентификатор уже существует.Как вы можете видеть из кода, я назначил идентификатор равным итерации цикла for.Проблема начинается с итерации / идентификатора 10. Я установил точку останова в коде, чтобы проверить узлы и значения, и, как вы можете видеть на изображении, объект узла фактически не содержит узла с идентификатором 10. Я не могупохоже выяснить в чем тут проблемаУ кого-нибудь есть предложения?

Изображение точки останова

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Geoinfo SDE StateTree</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" type="text/css" />

    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/4.4.0/papaparse.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"></script>
<script type="text/javascript">
Papa.parse("WIL_sde_states_fejl.txt", {
  download: true,
  complete: function(results) {
    var tree = results.data;
    var nodes = new vis.DataSet();
    var edges = new vis.DataSet();
    var levels = [];
    var state, parent, version, lineage;
    for (i = 1; i < tree.length; i++) {
      id = String(i)
      state = tree[i][0];
      parent = tree[i][1];
      version = tree[i][2];
      lineage = tree[i][3];
      if (version.toUpperCase() === '') {
        if (state != parent) {
          nodes.add([{
            id: id,
            lid: lineage,
            label: state
          }]);
          edges.add([{
            from: id,
            to: parent
          }]);

        } else {
          nodes.add([{
            id: id,
            lid: lineage,
            label: state,
            color: '#0000FF'
          }]);
        }
      }else if (version.slice(-7).toUpperCase() == 'DEFAULT') {
        nodes.add([{
          id: id,
          lid: lineage,
          label: state
        }, {
          id: id, //state.concat('v')
          lid: lineage,
          label: version,
          color: '#ff0000'
        }]);
        edges.add([{
          from: id,
          to: parent
        }, {
          from: id,//state.concat('v'),
          to: state,
          arrows: {
            to: {
              enabled: true
            },
            from: {
              enabled: false
            }
          }
        }]);
      }else if (version.slice(0, 5).toUpperCase() == 'SYNC_') {
        nodes.add([{
          id: id,
          lid: lineage,
          label: state
        }, {
          id: id, //state.concat('v'),
          lid: lineage,
          label: version,
          color: '#ff6600'
        }]);
        edges.add([{
          from: state,
          to: parent
        }, {
          from: id,//state.concat('v'),
          to: state,
          arrows: {
            to: {
              enabled: true
            },
            from: {
              enabled: false
            }
          }
        }]);
      }else {
        nodes.add([{
          id: id,
          lid: lineage,
          label: state
        }, {
          id: id,//state.concat('v')
          lid: lineage,
          label: version,
          color: '#ffcc00'
        }]);
        edges.add([{
          from: id,
          to: parent
        }, {
          from: id, //state.concat('v'),
          to: state,
          arrows: {
            to: {
              enabled: true
            },
            from: {
              enabled: false
            }
          }
        }]);
      }
    }
    // create a network
    var container = document.getElementById('mynetwork');
    var data = {
      nodes: nodes,
      edges: edges
    };
    var options = {
      layout: {
        hierarchical: {
          enabled: true
        }
      },
      nodes: {
        shape: 'dot',
        size: 20,
        borderWidth: 0.5,
        color: {
          border: '000000',
          background: '#77d14a'
        },
        font: {
          background: '#FFFFFF'
        }
      },
      edges: {
        width: 0.5,
        color: '000000',
        arrows: 'from'
      },
      physics: {
        stabilization: false
      }
    };
    var network = new vis.Network(container, data, options);
  }
});
</script>


    <style>
    #mynetwork {
        width: 98%;
        height: 98%;
        border: 1px solid lightgray;
    }
    </style>


  </head>
  <body>


    <div id="mynetwork"></div>
  </body>
</html>

1 Ответ

0 голосов
/ 22 мая 2018

Хорошо, я разобрался с проблемой.

nodes.add([{
    id: id,
    lid: lineage,
    label: state
}, {
    id: id, //state.concat('v')
    lid: lineage,
    label: version,
    color: '#ff0000'
}]);

эти два идентификатора не могут иметь одинаковое имя.

...