2012-09-25 30 views
3

我正在使用d3呈现数据。我有)一个nodes列表,从中我使用。进入(建造一堆SVG群体,像这样(简化):d3:数据更改时刷新子节点上的attr值

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 }); 

但是,如果我编辑列表项的name,SVG的文本元素不更新(因为它的text attr只在创建时被调用)。我该如何告诉d3“重新创建”与已更改的listitem相对应的SVG组?我正在做这个强制布局的一部分,所以我可以在每个剔号上设置一个属性,但这样做很不雅观。

回答

3

需要的是将数据再次送回节点。所以,当我已经更新了nodes名单,我这样做:

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

和重新计算。