我用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,但这相当不优雅。
答案 0 :(得分:3)
需要的是再次将数据反馈到节点中。所以,当我更新nodes
列表时,我会这样做:
vis.selectAll(".node text")
.data(nodes)
.text(function(d) { return d.name });
并重新计算。