Javascript 在mxgraph中进行一定操作后,如何高效地更新图形模型?
在mxgraph中连续拖放后,单元格的parentInfo将丢失 连续拖放后,单元格的子项和父项不会得到更新 拖放是使用connect处理的,其背后的逻辑很简单。 删除现有父连接并建立新边缘 与目标节点的连接 这里是单元格的单击事件处理程序,它在单击时提供有关单元格的信息及其直接父单元格信息。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');
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下双击设置名称
,您将看到cellInfo为14双击设置名称
,parentInfo为14双击设置名称
,这是正确的20双击设置名称
- 现在拖动
20双击以设置名称
在
22双击以设置名称下 单击
,CellInfo和ParentInfo都包含20双击设置名称
。ParentInfo实际上应该包含20双击设置名称
22双击设置名称
- 因此,单元格
,它已经处于不好的状态,当您现在尝试连接20双击设置名称
。图表中断18时,双击设置名称
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
};