使用selection.datum替换数据?它是如何工作的?

时间:2013-03-13 23:04:32

标签: d3.js

我有一些d3代码可以选择并附加一个'gateway'对象数组,如下所示:

var gwList = chart.selectAll('.gw')
             .data(gateways);

gwList
  .enter()
  .append('svg:g')
  .attr('class', 'gw')  // the CSS class to use. Change this!
  .append("svg:path")   // append a path only for each new object, with class 'line'
  .attr("class", "line")
  .attr("clip-path", "url(#clip)")
  .datum(function(d, i) {
      return {object: d, timeValues:null};
  });

注意.datum()调用。我希望条目选择元素用一个具有2个属性的对象替换它们的网关对象。

然后我这样做:

gwList
    .selectAll('path.line')
    .data(function(d) {
        // stuff
    });

我无法弄清楚的是,即使我对入口节点有'datum()'调用,但较低的.data()函数中的'd'值始终是原始的网关对象,而不是修改内部对象。 'this'的值是路径元素的选择数组,它们的确具有数据值。我如何检索它,为什么不在(d)中?

d[0].__data__ // gives the right answer
d.data() is an error about object [object Array] has no method 'data'
d[0].data() Object #<SVGPathElement> has no method 'data'

我试过找一个selection.datum的例子,但还没有看到一个解释这个的例子。有人可以告诉我这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

想出来。而不是在selectAll('path.line')之后的部分中调用'data()',我需要调用'each'或'call'。这正确地将子选择的数据传递给函数。