Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在mxgraph中进行一定操作后,如何高效地更新图形模型?_Javascript_Svg_Tree_Drag And Drop_Mxgraph - Fatal编程技术网

Javascript 在mxgraph中进行一定操作后,如何高效地更新图形模型?

Javascript 在mxgraph中进行一定操作后,如何高效地更新图形模型?,javascript,svg,tree,drag-and-drop,mxgraph,Javascript,Svg,Tree,Drag And Drop,Mxgraph,在mxgraph中连续拖放后,单元格的parentInfo将丢失 连续拖放后,单元格的子项和父项不会得到更新 拖放是使用connect处理的,其背后的逻辑很简单。 删除现有父连接并建立新边缘 与目标节点的连接 这里是单元格的单击事件处理程序,它在单击时提供有关单元格的信息及其直接父单元格信息。 graph.addListener(mxEvent.CLICK, function(sender, evt) { var cell = evt.getProperty('cell');

在mxgraph中连续拖放后,单元格的parentInfo将丢失

连续拖放后,单元格的子项和父项不会得到更新

拖放是使用connect处理的,其背后的逻辑很简单。 删除现有父连接并建立新边缘 与目标节点的连接

这里是单元格的单击事件处理程序,它在单击时提供有关单元格的信息及其直接父单元格信息。

graph.addListener(mxEvent.CLICK, function(sender, evt) {
      var cell = evt.getProperty('cell');
      if (cell && cell.id) {
        const nodeData = hierarchialData(graph, cell);
        console.log('cellInfo => ', JSON.stringify(nodeData));
        console.log(
          'parentInfo => ',
          JSON.stringify(getParentCell(cell).value)
        );
      }
    });
上面的代码在两次拖动时运行良好,之后parentInfo丢失并将单元格本身显示为其父单元格

部署在Heroku的以下位置:

演示:

当它到达节点:
20双击设置名称
,您会注意到它的parentInfo是相同的:
20双击设置名称
,而不是
22双击设置名称
,因此边缘构造失败

这里出了什么问题,我是否正确更新了顶点和边

另外,在加载url时,您可能会观察到整个图形是朝着鼠标移动的方向拖动的。这也应该避免

复制步骤:
  • 移动
    14双击设置名称
    20下双击设置名称

    单击
    14双击设置名称
    ,您将看到cellInfo为
    14双击设置名称
    ,parentInfo为
    20双击设置名称
    ,这是正确的

  • 现在拖动
    20双击以设置名称
    22双击以设置名称下

    单击
    20双击设置名称
    ,CellInfo和ParentInfo都包含
    20双击设置名称
    。ParentInfo实际上应该包含
    22双击设置名称

  • 因此,单元格
    20双击设置名称
    ,它已经处于不好的状态,当您现在尝试连接
    18时,双击设置名称
    。图表中断


由于我找不到克隆的任何参考资料,而深度克隆在jGraph本身及其公开问题上也存在缺陷,因此我设法解决了这个问题,获得了cell的参考副本,并在target下重新构建了cell

mxConnectionHandler.prototype.connect = function(source, target) {
  const nodeData = [{"id":"12","value":"12-Double click to set name","children":[{"id":"14","value":"14-Double click to set name"}]}]
  drawNodes(graph, nodeData, target, source); // recursively
};

请写一些复制你的问题的步骤好吗?@NickAth-我已经通过上面的gif演示过了。你想让我写这些步骤吗?在gif中,我直接看到了错误(cellInfo是'12',而它应该是'14',对吗?),但我没有看到导致此结果的之前所采取的步骤。这是正确的,cellInfo是特定的单元格信息,单击
14双击设置名称
,cellInfo将是14,即它自己的单元格id信息,并且有一个parentInfo,它给出了它的单元格的值,即双击设置名称
@NickAth-也用复制步骤更新了问题
mxConnectionHandler.prototype.connect = function(source, target) {
  const nodeData = [{"id":"12","value":"12-Double click to set name","children":[{"id":"14","value":"14-Double click to set name"}]}]
  drawNodes(graph, nodeData, target, source); // recursively
};