提供新数据后,D3选择不再更新

时间:2014-10-15 20:28:06

标签: javascript d3.js

创建新选择并提供数据:

var svg = d3.select("body").append("svg");

var _nodeSelection = svg.insert("g").selectAll(".node");
var _nodeData = _nodeSelection.data(_nodes);

_nodeData
.enter().append("text")
.attr("class", "node");  

经过一些回调后,所有现有元素的属性都会发生变化,这样可行!

_nodeData.attr("class", "update");

在另一个回调中,我向选择提供新数据,并在调用Enter / Exit例程之前尝试更新现有选择。

// No longer works after supplying new data
var _nodeData = _nodeSelection.data(_nodes);

// Does not work anymore:
_nodeData.attr("class", "update2");

这不再有效,因为在类中没有更新到update2。这对我来说是令人惊讶的,因为根据这个example这应该有效。

因此,在新数据选择上调用.Enter()会在示例位置创建一组新元素作为旧元素,以便复制所有svg元素。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您必须使用selectall明确重新选择。 D3在提供数据时对选择进行显式内部绑定,并且不能在同一选择上应用两次。