将对象函数传递给d3中的data()

时间:2013-07-23 23:40:58

标签: javascript d3.js

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

中为每个数组的每个元素插入一个矩形

1 个答案:

答案 0 :(得分:6)

请参阅this answer

它被用作身份功能 - 之前与选择绑定的内容仍然存在。这种模式通常是必需的,因为您必须调用.data()来获取更新选择。

就个人而言,我强烈不喜欢这样混淆我的代码;我宁愿做.data(function(d) { return d;})因为我在那里做的很明显。 YMMV。