diff --git a/src/chart/tree/TreeSeries.js b/src/chart/tree/TreeSeries.js index 6ec1dc2bde..068844d3d0 100644 --- a/src/chart/tree/TreeSeries.js +++ b/src/chart/tree/TreeSeries.js @@ -47,7 +47,18 @@ export default SeriesModel.extend({ treeOption.leaves = leaves; - var tree = Tree.createTree(root, this, treeOption); + var tree = Tree.createTree(root, this, treeOption, beforeLink); + + function beforeLink(nodeData) { + nodeData.wrapMethod('getItemModel', function (model, idx) { + var node = tree.getNodeByDataIndex(idx); + var leavesModel = node.getLeavesModel(); + if (!node.children.length || !node.isExpand) { + model.parentModel = leavesModel; + } + return model; + }); + } var treeDepth = 0; diff --git a/src/data/Tree.js b/src/data/Tree.js index ad81605ca1..85b41a2dd6 100644 --- a/src/data/Tree.js +++ b/src/data/Tree.js @@ -472,7 +472,7 @@ Tree.prototype = { * @param {Array.} treeOptions.leaves * @return module:echarts/data/Tree */ -Tree.createTree = function (dataRoot, hostModel, treeOptions) { +Tree.createTree = function (dataRoot, hostModel, treeOptions, beforeLink) { var tree = new Tree(hostModel, treeOptions.levels, treeOptions.leaves); var listData = []; @@ -519,6 +519,8 @@ Tree.createTree = function (dataRoot, hostModel, treeOptions) { tree.update(); + beforeLink && beforeLink(list); + return tree; }; diff --git a/test/tree-addNode.html b/test/tree-addNode.html index 82c6647096..0c656e9edf 100644 --- a/test/tree-addNode.html +++ b/test/tree-addNode.html @@ -49,15 +49,18 @@ var data = { "name": "flare", + "value": 111, "children": [ { "name": "flex", + "value": 222, "children": [ {"name": "FlareVis", "value": 4116, symbolSize: 20} ] }, { "name": "scale", + "value": 333, "children": [ {"name": "IScaleMap", "value": 2105}, {"name": "LinearScale", "value": 1316}, @@ -73,6 +76,7 @@ }, { "name": "display", + "value": 444, "children": [ {"name": "DirtySprite", "value": 8833} ] @@ -120,14 +124,18 @@ label: { position: 'right', verticalAlign: 'middle', - align: 'left' + align: 'left', + formatter: '{b}: {c}' }, leaves: { label: { - position: 'left', - verticalAlign: 'middle', - align: 'right' + position: 'left', + verticalAlign: 'middle', + align: 'right', + formatter: function (params) { + return params.data.name + params.dataIndex; + } } },