问题描述
我通过从 json 数据中提取数据来创建一个 orgChart。 起初我只想显示 orgChart 的第一级。我的意思是图表的顶部。 然后当我单击节点时我想列出被单击节点的子节点。我的意思是显示点击节点的一级相关子节点。
这是我点击时的选择事件代码
function selectHandler(e) {
//console.log(selectedItem);
/////////////////////////////////////
var selection = chart.getSelection();
var row;
if (selection.length == 0) {
row = prevIoUs;
}
else {
row = selection[0].row;
prevIoUs = row;
}
var collapsed = chart.getCollapsednodes();
var collapse = (collapsed.indexOf(row) -== 1);
chart.collapse(row,collapse);
chart.setSelection([{row: row,column: null}]);}
解决方法
你可以在ready事件中使用collapse方法来折叠节点。
确保在分配就绪事件时使用 addOneTimeListener
。
否则,节点将在每次选择时折叠。
这是因为当节点折叠/未折叠时会触发 ready 事件。
请参阅以下工作片段...
google.charts.load('current',{
packages: ['orgchart']
}).then(function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string','Name');
data.addColumn('string','Manager');
data.addColumn('string','ToolTip');
data.addRows([
[{'v':'Mike','f':'Mike<div style="color:red; font-style:italic">President</div>'},'','The President'],[{'v':'Jim','f':'Jim<div style="color:red; font-style:italic">Vice President</div>'},'Mike','VP'],['Alice',''],['Bob','Jim','Bob Sponge'],['Carol','Bob','']
]);
var chart = new google.visualization.OrgChart(document.getElementById('chart'));
google.visualization.events.addOneTimeListener(chart,'ready',function () {
// loop rows in reverse order
for (var i = data.getNumberOfRows() - 1; i >= 0; i--) {
// determine if node has children
if (chart.getChildrenIndexes(i).length > 0) {
// collapse row
chart.collapse(i,true);
}
}
});
google.visualization.events.addListener(chart,'select',function () {
// get selection
var selection = chart.getSelection();
// determine if selection made
if (selection.length > 0) {
// collapse / un-collapse row
chart.collapse(selection[0].row,(chart.getCollapsedNodes().indexOf(selection[0].row) === -1));
}
});
chart.draw(data,{allowHtml: true,allowCollapse: true});
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart"></div>
注意:使用 select 事件存在问题。当一个节点被取消选择时会触发该事件,并且无法知道哪个节点被取消选择。
因此,如果同一节点被点击两次,第二次点击时不会发生任何事情。
使用默认操作可能有意义,
允许用户双击节点折叠/取消折叠。
并一起删除 select 事件。