3

我正在用 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 文本元素不会更新(因为它的textattr 仅在创建时调用)。如何告诉 d3 “重新创建”与更改的列表项相对应的 SVG 组?我这样做是作为强制布局的一部分,所以我可以text在每个刻度上设置 attr,但这很不雅。

4

1 回答 1

3

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

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

并且重新计算。

于 2012-09-25T10:08:38.717 回答