2013-12-14 66 views
2

我想下面d3.js力布局适应自己的需要:
http://bl.ocks.org/mbostock/1093130d3.js强制布局图:如何从头开始构建节点对象?

当我使用下面的JSON文件,一切显示正常(2个节点和1个链接):

{ 
    "name": "parent", 
    "children": [ 
      {"name": "child1", "size": 100} 
    ] 
    } 

然后,我想从头开始构建节点对象;所以,在上面提到的参考例中,我用下面的一个替换flatten()功能:

function flatten1() { 
     var nodes = []; 
     var node = {name: 'child1', size: 100, id: 1}; 
     nodes.push(node); 
     node = {name: 'parent', children: [{name: 'child1', size: 100, id: 1}], id: 2}; 
     nodes.push(node); 
     return nodes; 
    } 

update()函数现在开头:

var nodes = flatten1(), 
links = d3.layout.tree().links(nodes); 

当然,我不使用json文件了。
当我检查节点和链接的内容时,它看起来类似于以前的工作代码(带有json文件),但是存在显示问题:2个节点都可以,但链接从父节点转到svg区块的左上角...

我错过了什么? 任何帮助将大大优于。

回答

2

我猜想,你传递到第二个节点的子节点需要是第一位的,没有新对象要创建一个参考。尝试这个;

function flatten1() { 
    var nodes = []; 
    var node1 = {name: 'child1', size: 100, id: 1}; 
    nodes.push(node1); 
    var node2 = {name: 'parent', children: [node1], id: 2}; 
    nodes.push(node2); 
    return nodes; 
} 

如果这样的作品,然后它给你如何塑造你压平算法的剩余一些想法。

+0

您的解决方案有效。非常感谢。 – user3102556