2016-08-01 83 views
3

我试图让一个约束放松为我的饼图工作。 它基于此示例https://jsfiddle.net/thudfactor/HdwTH/,但使用的放松方法似乎不再适用于v4。
具体问题是他们如何直接访问选择组数组:D3 v4 - 访问选择数组并找到相应的元素

textLabels = labelGroups.append("text").attr(...); 

if(again) { 
     labelElements = textLabels[0];  <------------- here 
     textLines.attr("y2",function(d,i) { 
      labelForLine = d3.select(labelElements[i]); 
      return labelForLine.attr("y"); 
     }); 
     setTimeout(relax,20) 
    } 

它是否与D3 4.x版改变了你访问一个选项组阵列?
你现在怎么样?

回答

7

在D3 4.0中,选择不再是数组。根据API:

选择不再子类使用原型链注入的数组;他们现在是普通的对象,提高了性能。

所以,如果你console.log(textLabels),你会看到这样的内容:

{_groups: Array[1], _parents: Array[1]} 

这依赖于你有什么选择。从那里,你可以使用textLabels._groups来访问你的数组。

对于具有阵列,则必须使用selection.nodes(),其中,根据API:

返回所有(非空)的阵列在此选择的元素。

+2

非常感谢Gerardo,它给了我正确的线索来使它工作! 'selection.nodes()'做了诀窍,现在v4返回包含在选择中的节点数组。 – TommyF

+0

@TommyF我希望我可以把这个提升一百倍。我在最后的四十分钟里四处寻找。 –

+0

@ba_ul那么,你至少可以*一次* * *! :-) –