在Mike Bostock的'Towards Reusable Charts'中,为什么与<p>
元素的初始数据链接是用数据(数据)进行的:
d3.csv("sp500.csv", function(data) {
var formatDate = d3.time.format("%b %Y");
d3.select("#example")
.datum(data)
.call(timeSeriesChart()
.x(function(d) { return formatDate.parse(d.date); })
.y(function(d) { return +d.price; }));
});
虽然使用数据([data])进一步将数据链接到chart()函数内的<svg>
元素:
// Select the svg element, if it exists.
var svg = d3.select(this).selectAll("svg").data([data]);
// Otherwise, create the skeletal chart.
var gEnter = svg.enter().append("svg").append("g");
gEnter.append("path").attr("class", "area");
gEnter.append("path").attr("class", "line");
gEnter.append("g").attr("class", "x axis");
在他自己的answer迈克说,这两种方法是可以互换的,除了前者不计算连接。那么为什么要在这里使用数据([数据]?)
如果注释行建议已经存在<svg>
元素,我也不太清楚会发生什么。对我来说,在这种情况下输入选择是空的,没有进一步的追加将起作用...
我一定是误会了......
感谢您的帮助!
答案 0 :(得分:0)
在第二种情况下使用.data([data])
的优点是,如果没有SVG,则输入选择的处理会添加它。如果存在SVG,则代码完全等同于.datum(data)
- 绑定到元素的数据将被更改,并且不会发生任何其他情况。