将函数传递给d3的.data()

时间:2014-08-21 15:14:22

标签: javascript d3.js callback transition

suburst with updating data拨打电话path.data(partition.value(value).nodes),其中partitiond3.layout.partitionvalue()功能用于布置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);
  });

1 个答案:

答案 0 :(得分:1)

要了解这里发生的事情,请查看nested selection教程。虽然这不是同一种用例,但从技术上讲它是这样的 - 初始数据传递给后来对.data()的调用。

嵌套选择的一般模式是.data(function(d) { return ...; })。这也是这里发生的事情;上面代码的长版本将是

path.data(function(d) { return partition.value(value).nodes(d); })

其中d是绑定到父节点的数据root