http://bl.ocks.org/mbostock/1134768
嘿伙计们,我对JavaScript很新,我主要是学习使用d3来渲染数据。我试图了解上面代码中发生了什么,特别是在代码段中:// Add a rect for each date
var rect = cause.selectAll("rect")
.data(Object) // THIS IS WEIRD TO ME....
.enter().append("svg:rect")
.attr("x", function(d) { return x(d.x); })
.attr("y", function(d) { return -y(d.y0) - y(d.y); })
.attr("height", function(d) { return y(d.y); })
.attr("width", x.rangeBand());
Object构造函数在.data()
中做了什么?我认为data()
将强制评估一个函数,所以实际上是在创建一个对象?为什么需要在causes
?
答案 0 :(得分:6)
请参阅this answer。
它被用作身份功能 - 之前与选择绑定的内容仍然存在。这种模式通常是必需的,因为您必须调用.data()
来获取更新选择。
就个人而言,我强烈不喜欢这样混淆我的代码;我宁愿做.data(function(d) { return d;})
因为我在那里做的很明显。 YMMV。