d3:数据更改时刷新子节点上的attr值

时间:2012-09-25 09:56:39

标签: d3.js

我用d3渲染数据。我有一个nodes列表,我使用.enter()构建了一堆SVG组,就像这样(简化):

nodes = [{name: "Fred"}, {name: "Barney"}];
var node = vis.selectAll(".node")
    .data(nodes)
    .enter().append("svg:g")
    .attr("class", "node");
var circ = node.append("svg:circle")
    .attr("x", 0)
    .attr("y", 0)
    .attr("r", 10)
node.append("svg:text")
    .attr("dx", 0)
    .attr("dy", 0)
    .text(function(d) { return d.name });

但是,如果我编辑一个listitem的name,则SVG文本元素不会更新(因为它的text attr仅在创建时被调用)。如何告诉d3“重新创建”与更改的listitem对应的SVG组?我正在做这个作为力布局的一部分,所以我可以在每个刻度上设置text attr,但这相当不优雅。

1 个答案:

答案 0 :(得分:3)

需要的是再次将数据反馈到节点中。所以,当我更新nodes列表时,我会这样做:

vis.selectAll(".node text")
  .data(nodes)
  .text(function(d) { return d.name });

并重新计算。