此suburst with updating data拨打电话path.data(partition.value(value).nodes)
,其中partition
为d3.layout.partition
,value()
功能用于布置nodes
。最初,数据通过path
传递给svg.datum(root)
,但在第一次调用和input
更改中,只有函数partition.nodes
传递给data()
。
我假设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);
});
答案 0 :(得分:1)
要了解这里发生的事情,请查看nested selection教程。虽然这不是同一种用例,但从技术上讲它是这样的 - 初始数据传递给后来对.data()
的调用。
嵌套选择的一般模式是.data(function(d) { return ...; })
。这也是这里发生的事情;上面代码的长版本将是
path.data(function(d) { return partition.value(value).nodes(d); })
其中d
是绑定到父节点的数据root
。