我正在使用组织图表插件。 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)
}
});
场景
单击 1 > 2B > 3B 然后点击2B 再次单击2B(仅显示3B,不显示3A) 它调用 showChildren() 但不显示子项。 3A似乎仍然有隐藏类别
请您参考如下方法:
我不知道 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>