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 テキスト要素は更新されません (属性はtext作成時にのみ呼び出されるため)。変更されたリスト項目に対応する SVG グループを「再作成」するように d3 に指示するにはどうすればよいですか? これは強制レイアウトの一部として行っているため、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 に答える