Javascript 将函数传递给d3';(二)
这将调用Javascript 将函数传递给d3';(二),javascript,d3.js,callback,transition,Javascript,D3.js,Callback,Transition,这将调用path.data(partition.value(value).nodes),其中partition是一个d3.layout.partition,使用value()函数来布局节点。最初,数据通过svg.datum(root)传递到路径,但在第一次调用和输入更改时,只有函数分区.节点传递到数据() 我假设data()然后只访问已经绑定到元素的内容,但我想澄清一下,因为path被定义为enter组,这在幕后是如何完成的。非常感谢。代码摘录如下 var partition = d3.layo
path.data(partition.value(value).nodes)
,其中partition
是一个d3.layout.partition
,使用value()
函数来布局节点。最初,数据通过svg.datum(root)
传递到路径
,但在第一次调用和输入
更改时,只有函数分区.节点
传递到数据()
我假设data()
然后只访问已经绑定到元素的内容,但我想澄清一下,因为path
被定义为enter
组,这在幕后是如何完成的。非常感谢。代码摘录如下
var partition = d3.layout.partition()
.sort(null)
.value(function(d) { return 1; });
d3.json("/d/4063550/flare.json", function(error, root) {
node = root;
var path = svg.datum(root).selectAll("path")
.data(partition.nodes)
.enter().append("path")
...
d3.selectAll("input").on("change", function change() {
var value = this.value === "count"
? function() { return 1; }
: function(d) { return d.size; };
path
.data(partition.value(value).nodes)
.transition()
.duration(1000)
.attrTween("d", arcTweenData);
});
为了理解这里发生了什么,看看教程是很有用的。虽然这里的用例不同,但从技术上讲,它是这样的——初始数据被传递给后面对.data()
的调用
嵌套选择的一般模式是.data(函数(d){return…;})
。这也是这里正在发生的事情;上述代码的长版本是
path.data(function(d) { return partition.value(value).nodes(d); })
其中,d
是绑定到父节点的数据,root
我知道原始调用和onchange
调用本质上是等效的,只需更改访问器即可。我的问题是,即使在最初调用data(partition.nodes)
,partition.nodes
也是一个确实返回数组的函数,但没有数据直接传递给它。我问的是从svg.datum(root)
传递的明显的隐式数据。非常感谢。抱歉,我不清楚(事实上对细节的理解是错误的!)——我已经解决了这个问题,希望它现在能回答您的问题。