You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GoJS如何通过搜索、key值获取图表节点数据替代选中获取方式

GoJS节点获取替代方案实现说明

针对你需要替换选中节点获取逻辑的需求,以下是你提到的三个API的具体使用场景和实现逻辑:

  • findNodeDataForKey + findNodeForData 组合方案(已知节点key场景)
    适用场景:你已经从登录用户信息中拿到了用户对应的节点唯一key值,是查询效率最高的方案
    实现逻辑:

    1. 调用myDiagram.model.findNodeDataForKey(目标key),直接从图模型中查询对应key的节点原始数据,无需遍历全量节点
    2. 调用myDiagram.findNodeForData(上一步拿到的节点数据),即可获取到对应的可视化节点实例
      代码示例:
    // 假设已从登录态中获取用户绑定的节点key
    const userNodeKey = 'xxx'
    const nodeData = myDiagram.model.findNodeDataForKey(userNodeKey)
    if (nodeData) {
      const node = myDiagram.findNodeForData(nodeData)
      // 此处直接替换原有逻辑中selection.first()拿到的node即可
    }
    
  • findNodesByExample 方案(条件搜索场景)
    适用场景:你不知道节点key,只知道节点的某个属性值(比如用户名、部门ID、角色标识等)需要匹配搜索
    实现逻辑:
    传入包含匹配规则的对象,方法会遍历全量节点,返回所有数据字段匹配规则的节点迭代器,支持多条件同时匹配
    代码示例:

    // 比如搜索节点数据中loginAccount字段等于当前登录账号的节点
    const matchedNodes = myDiagram.findNodesByExample({
      loginAccount: currentUser.account
      // 可追加多个匹配条件,如deptId: currentUser.deptId
    }).toArray()
    if (matchedNodes.length > 0) {
      const node = matchedNodes[0]
      // 替换原有逻辑的node即可
    }
    
  • findNodeForData 直接调用方案(已有节点数据场景)
    适用场景:你已经从其他业务逻辑(比如接口返回、本地缓存)中拿到了节点的完整数据对象
    实现逻辑:
    直接传入已有的节点数据对象,方法会直接关联查找对应的可视化节点实例,不需要遍历查询,性能最优
    代码示例:

    // 假设已从其他业务逻辑中拿到节点数据
    const cachedNodeData = getUserRelatedNodeData()
    const node = myDiagram.findNodeForData(cachedNodeData)
    if (node) {
      // 替换原有逻辑的node即可
    }
    

完整改造示例(基于key获取节点)

function showSubChartForLoginUser(userBindNodeKey) {
    var targetNodeData = myDiagram.model.findNodeDataForKey(userBindNodeKey);
    if (!targetNodeData) return;
    var node = myDiagram.findNodeForData(targetNodeData);
    if (node !== null) {
        myDiagram.scrollToRect(node.actualBounds);
        var model = new go.TreeModel();
        var nearby = node.findTreeParts();
        nearby.each(function(n) {
            if (n instanceof go.Node) model.addNodeData(n.data);
        });
        myDiagram.model = model;
        var selectedLocal = myDiagram.findPartForKey(node.data.key);
        if (selectedLocal !== null) selectedLocal.isSelected = true;
    }
}

内容的提问来源于stack exchange,提问作者SONG OH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:48:00