我有一些 d3 代码可以选择并附加一个“网关”对象数组,如下所示:
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 的例子,但还没有看到一个可以解释这一点的例子。有人可以告诉我这里发生了什么吗?