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

dai*_*ish 4 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());
Run Code Online (Sandbox Code Playgroud)

Object构造函数在做什么.data()?我认为这data()将强制评估一个函数,所以实际上是在创建一个对象?为什么需要为每个数组的每个元素插入一个矩形causes

roi*_*ppi 6

看到这个答案.

它被用作身份功能 - 之前与选择绑定的内容仍然受到约束.这种模式通常是必需的,因为您必须调用.data()才能获得更新选择.

我个人非常不喜欢这样混淆我的代码; 我更愿意这样做.data(function(d) { return d;}),因为很明显我在那里做什么.因人而异.