2012-07-28 64 views
3

请看看这个简单的jsfiddle:http://jsfiddle.net/perikut/9qUVW/2/(抱歉,如果使用的是Firefox,我不知道为什么它看起来并不好...)约d3.layout.pack几个简单的问题()

enter image description here

在我们的对象中,我们可以使用另一个词而不是'children'来指示从哪里抽取数据? (我看到的所有例子都遵循这个数据结构,见下文)。我们应该在哪里指出?

我认为我的代码相当不足(请参阅jsfiddle),因为我为了显示/隐藏组/父项目中的子项目而被迫声明两次'group'参数。

有没有办法直接选择group1的子节点和应用动画?我希望将来有更复杂的数据结构,所以我需要先了解这种基础知识。

当前数据结构:

data = { 
name:'root', 
group:'no_group', 
children:[ 
    { 
     group: 'group1', 
     children:[ 
      { group:'group1',name:'a1',value:10,color:'red' }, 
      { group:'group1',name:'a2',value:40,color:'lightcoral' } 
     ] 
    } 
    , { .... } 

回答

4

在D3的hierarchical layouts,所有节点都填充有一组standard attributes,包括一个 “父” 属性。这样就可以避免指定一个“组”属性,并使用“父母”,而不是选择特定节点的孩子时:

d3.selectAll("circle").filter(function(d) { return d.parent.name === "foo"; }); 

或者,您也可以通过对象引用比较,如果你有到节点对象的引用本身。

var parent = nodes.filter(function(d) { return d.name === "foo"; }); 
d3.selectAll("circle").filter(function(d) { return d.parent === parent; }); 

这里我假设每个节点都有一个“名称”属性。

您还提到使用从其他属性中检索子项。是的,这可以使用"children" accessor来实现。请注意,这会将节点的子节点存储在该节点上的一个名为“children”的属性中,覆盖可能已存在的任何内容。