我正在使用组织图表插件。 showChildren() 方法未显示所有子项。

  var $rsContainer = $('#reportingStructure'); 
 
  var reportingConfig = $('#reportingStructure').orgchart({ 
    'data' : reportingData, 
    'nodeId': 'id', 
    'nodeContent': 'title', 
    'nodeTemplate': nodeTemplate, 
    'direction': 'l2r', 
    'visibleLevel':1 
  }); 
 
  var nodeTemplate = function(data) { 
    return `<div> 
                <div class="title">${data.name}</div> 
                <div class="content">${data.title}</div> 
            </div>`; 
  }; 
 
  $rsContainer.on('click', '.node', function () { 
    var $this = $(this); 
    $('#selected-node').val($this.find('.title').text()).data('node', $this); 
    var $node = $('#selected-node').data('node'); 
    var childNodeStatus = reportingConfig.getNodeState($node, 'children') 
    var siblingNodesStatus = reportingConfig.getNodeState($node, 'siblings') 
    console.log(childNodeStatus); 
    console.log(siblingNodesStatus); 
 
    if (childNodeStatus.exist && !childNodeStatus.visible && !siblingNodesStatus.exist && !siblingNodesStatus.visible) { 
      reportingConfig.showChildren($node) 
    } else if(childNodeStatus.exist && childNodeStatus.visible && !siblingNodesStatus.exist && !siblingNodesStatus.visible) { 
      reportingConfig.hideChildren($node) 
    } else if(childNodeStatus.exist && !childNodeStatus.visible && siblingNodesStatus.exist && siblingNodesStatus.visible) { 
      reportingConfig.showChildren($node) 
      reportingConfig.hideSiblings($node) 
    } else if(childNodeStatus.exist && childNodeStatus.visible && siblingNodesStatus.exist && !siblingNodesStatus.visible) { 
      reportingConfig.hideChildren($node) 
      reportingConfig.showSiblings($node) 
    } else if(childNodeStatus.exist && !childNodeStatus.visible && siblingNodesStatus.exist && !siblingNodesStatus.visible) { 
      reportingConfig.showChildren($node) 
      reportingConfig.hideSiblings($node) 
    } 
 
  }); 

Check this example

场景

单击 1 > 2B > 3B 然后点击2B 再次单击2B(仅显示3B,不显示3A) 它调用 showChildren() 但不显示子项。 3A似乎仍然有隐藏类别

This is the plugin documentation

请您参考如下方法:

我不知道 orgcharts 库,但我找到了解决方案。我看到的问题是,当在父节点上执行 .showChildren($node) 时,使用 .hideSiblings($node) 隐藏的节点不会显示。

下面列出了修复该问题的更改。我认为这是一个通用的解决方案,但我没有检查每个组合。

我替换了每个:

reportingConfig.showChildren($node) 

与:

showChildren($node); 

并且 showChildren() 函数是:

  function showChildren($node) { 
    reportingConfig.showChildren($node); 
    var children = reportingConfig.getRelatedNodes($node, 'children'); 
    for (var i = 0; i < children.length; i++) { 
      reportingConfig.showSiblings($(children[i])); 
    } 
  } 

查看代码片段:

$(document).ready(function() { 
  var reportingData = { 
    'name': '1', 
    'title': 'general manager', 
    'children': [{ 
        'name': '2A', 
        'title': 'department manager' 
      }, 
      { 
        'name': '2B', 
        'title': 'department manager', 
        'children': [{ 
            'name': '3A', 
            'title': 'senior engineer' 
          },{ 
            'name': '3C', 
            'title': 'senior engineer' 
          }, 
          { 
            'name': '3B', 
            'title': 'senior engineer', 
            'children': [{ 
                'name': '4A', 
                'title': 'engineer' 
              }, 
              { 
                'name': '4B', 
                'title': 'UE engineer', 
                'children': [{ 
                    'name': '5A', 
                    'title': 'engineer' 
                  }, 
                  { 
                    'name': '5B', 
                    'title': 'UE engineer' 
                  } 
                ] 
              } 
            ] 
          } 
        ] 
      }, 
      { 
        'name': '2C', 
        'title': 'department manager' 
      }, 
      { 
        'name': '2D', 
        'title': 'department manager' 
      }, 
      { 
        'name': '2E', 
        'title': 'department manager', 
        'children': [{ 
            'name': '3A', 
            'title': 'senior engineer' 
          }, 
          { 
            'name': '3B', 
            'title': 'senior engineer', 
            'children': [{ 
                'name': '4A', 
                'title': 'engineer' 
              }, 
              { 
                'name': '4B', 
                'title': 'UE engineer' 
              } 
            ] 
          } 
        ] 
      }, 
      { 
        'name': '2F', 
        'title': 'department manager' 
      }, 
      { 
        'name': '2G', 
        'title': 'department manager' 
      }, 
      { 
        'name': '2H', 
        'title': 'department manager' 
      } 
    ] 
  }; 
 
  var $rsContainer = $('#reportingStructure'); 
 
  var reportingConfig = $('#reportingStructure').orgchart({ 
    'data': reportingData, 
    'nodeId': 'id', 
    'nodeContent': 'title', 
    'nodeTemplate': nodeTemplate, 
    'direction': 'l2r', 
    'visibleLevel': 1 
  }); 
 
  var nodeTemplate = function(data) { 
    return `<div> 
                    <div class="title">${data.name}</div> 
                    <div class="content">${data.title}</div> 
                </div>`; 
  }; 
 
  $rsContainer.on('click', '.node', function() { 
    var $this = $(this); 
    $('#selected-node').val($this.find('.title').text()).data('node', $this); 
    var $node = $('#selected-node').data('node'); 
    var childNodeStatus = reportingConfig.getNodeState($node, 'children') 
    var siblingNodesStatus = reportingConfig.getNodeState($node, 'siblings') 
    //console.log(childNodeStatus); 
    //console.log(siblingNodesStatus); 
    //debugger; 
 
    if (childNodeStatus.exist && !childNodeStatus.visible && !siblingNodesStatus.exist && !siblingNodesStatus.visible) { 
      showChildren($node); 
    } else if (childNodeStatus.exist && childNodeStatus.visible && !siblingNodesStatus.exist && !siblingNodesStatus.visible) { 
      reportingConfig.hideChildren($node) 
    } else if (childNodeStatus.exist && !childNodeStatus.visible && siblingNodesStatus.exist && siblingNodesStatus.visible) { 
      showChildren($node); 
      reportingConfig.hideSiblings($node) 
    } else if (childNodeStatus.exist && childNodeStatus.visible && siblingNodesStatus.exist && !siblingNodesStatus.visible) { 
      reportingConfig.hideChildren($node) 
      reportingConfig.showSiblings($node) 
    } else if (childNodeStatus.exist && !childNodeStatus.visible && siblingNodesStatus.exist && !siblingNodesStatus.visible) { 
      showChildren($node); 
      reportingConfig.hideSiblings($node) 
    } 
 
  }); 
 
  function showChildren($node) { 
	reportingConfig.showChildren($node); 
	var children = reportingConfig.getRelatedNodes($node, 'children'); 
	for (var i = 0; i < children.length; i++) { 
	  reportingConfig.showSiblings($(children[i])); 
	} 
  } 
})
.orgchart .edge { 
  display: none; 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/orgchart/2.1.1/css/jquery.orgchart.min.css" rel="stylesheet" /> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/orgchart/2.1.1/js/jquery.orgchart.js"></script> 
<input type="text" id="selected-node" /> 
<div id="reportingStructure"></div>


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!