2012-07-27 89 views
1

sunburst中,我怎样才能让代码选择一个根弧,就在所有弧生成之后?选择弧/元素

例如,代码:

var first_arc = "" 
.json("../data/flare.json", function(json) { 
    var path = vis.data([json]).selectAll("path") 
     .data(partition.nodes) 
    .enter().append("path") 
     .attr("display", function(d) { return d.depth ? null : "none"; }) 
     .attr("d", arc) 
     .attr("t_name", function(d) {return d.name}) 
     .style("fill-rule", "evenodd") 
     .on("click", function(d)... 

它将作为点击中间弧“d”的“功能”被传递。

(其数据先行在JSON文件)

更新1:更改像这样的代码...

.style("fill-rule", function(d) { 
    if (first_arc == "") first_arc = d; return "evenodd"}) 

...解决了这个问题,它返回object

name: "flare" 
children: Array[10] 
... 

但这种解决方案看起来不正确,不是一般的。

更新2:我尝试了几种选择,例如:

first_arc = d3.select("[name='flare']") 

它通常返回array

0: null 
length: 1 
parentNode: HTMLHtmlElement 
__proto__: Array[0] 

或 “未定义”

更新3

first_arc = d3.select("[t_name='flare']") 

收益大小为1 array儿童:

0: SVGPathElement 
    __data__: Object 

,其中__data__是经过我的对象,但我不能管理,将其选中。

+0

要清楚:你是否想让代码选择元素,还是要求用户单击一个弧并直接处理? – Phrogz 2012-07-27 15:23:14

+0

尝试让代码选择元素,直到电弧生成完成。 – alm 2012-07-27 15:33:08

+0

那我还是不明白你的问题是什么。你可以使用['d3.select()'](https://github.com/mbostock/d3/wiki/Selections#wiki-d3_select)方法。你尝试过吗?如果是这样,你的代码是什么,你得到了什么错误(和你期望的是什么)? – Phrogz 2012-07-27 16:05:01

回答

2

根节点是一个具有“深度”属性设置为0,所以你可以说:

d3.selectAll("path").filter(function(d) { return d.depth === 0; }) 

你尝试以上没有工作,因为D3 uses CSS3 to select elements。因此,只能使用d3.select和d3.selectAll与CSS3选择器,即不能以这种方式访问​​绑定到每个元素的数据。过滤绑定数据的方法是使用selection.filter

D3 selections确实是一个元素数组,请参阅“在选择操作”部分。

最后,您可以使用selection.datum()获取元素的绑定__data__属性。

+0

谢谢!这非常有用。虽然,您提到的选择返回与d3.select(“[t_name ='flare']”)“相同的对象。 – alm 2012-08-01 08:46:08

+1

我不知道t_name是什么 - 是你设置的属性?我已经添加了一些关于D3选择和检索绑定数据的答案。 – 2012-08-01 12:41:14

+0

是的,.datum()是我需要的。非常感谢! – alm 2012-08-01 13:39:02