如何从mxgraph中的子单元格获取父单元格

How to get parent cell from child cell in mxgraph

我想从父级删除所有连接到源的边,那么有没有任何函数可以删除单元格引用的从父级到子级的所有连接边。

如何在 mxgraph 中从子单元格获取父单元格。

我正在尝试使用连接器实现拖放操作,我说得对吗?

mxConnectionHandler.prototype.connect = function(source, target, evt, dropTarget){
   // First I'll connect the target and source edges
   // Later I'll remove all connected edges from parent to source
}

source.parent.getValue('value') 现在未定义。

我需要父引用,这样它也有助于保存到数据库。

我可以从文档中看到:mxCell.prototype.getParent = function(),但是如何使用它呢?请用一个小例子来演示。

尝试使用 cell.getParent()

另外:graph.model.getParent(cell)

但是 returns: mxCell {value: undefined, geometry: undefined, style: undefined, parent: mxCell, id: "1", …}

其值为undefined。我做错了什么或如何完美地获取其父单元格引用?

我得到这个的唯一方法是将 parentid 附加到 cellid。并使用 array split 并从其 id 中获取单元格,但我不喜欢这样做,因为当连接多个边缘时我会有很多工作。所以,我需要最简单的解决方案。

打消调试下的念头:graph.model.getParent(cell)

父级指的是区域,它与所有顶点共享。因此,在以下帮助下遇到了父单元格引用:cell.edges[0].source 对于单边连接,如果有多个边从不同的父级连接,则应该 cell.edges[...n].source 取决于你想如何解决它们。

首先,让我们考虑以下两个:

1) 细胞的子细胞:

一个单元格指向我们感兴趣的单元格。

代码

function getChildrenOfCell(cell){
if(cell != undefined){
    let children = [];
    let edges = cell.edges;
    if(edges != null){
        for(let i = 0; i < edges.length; i++){
            if(edges[i].target.value == cell.value){
                let cellCopy = edges[i].source.clone();
                children.push(cellCopy);
            }
        }
    }
    return children;
}
else{
    return [];
}
}

2) 父单元格:

我们感兴趣的单元格指向的单元格。

代码

function getParentsOfCell(cell){
if(cell != undefined){
    let parents = [];
    let edges = cell.edges;
    if(edges != null){
        for(let i = 0; i < edges.length; i++){
            if(edges[i].source.value == cell.value){
                let cellCopy;
                if(!parents.includes(edges[i].target)){
                    cellCopy = edges[i].target
                }
                parents.push(cellCopy);
            }
        }
    }
    return parents;
}
else{
    return [];
}
}