首页 > 解决方案 > 如何从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)

但它返回:mxCell {value: undefined, geometry: undefined, style: undefined, parent: mxCell, id: "1", …}

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

通过将parentid附加到cellid,我得到了这个工作的唯一方法。并使用数组拆分并从其 id 中获取单元格,但我不乐意这样做,因为当连接多个边时我会有很多工作。所以,我需要最简单的解决方案。

标签: javascriptmxgraphjgraph

解决方案


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

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 [];
}
}

推荐阅读