我有一些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的例子,但还没有看到一个解释这个的例子。有人可以告诉我这里发生了什么吗?
答案 0 :(得分:0)
想出来。而不是在selectAll('path.line')之后的部分中调用'data()',我需要调用'each'或'call'。这正确地将子选择的数据传递给函数。