有关数据加入的快速问题。假设我有一些元素,每个元素包含一个。当我最初将数据加入到时,它会被我追加到输入选择的元素自动继承。
当数据被更改并且我将其重新绑定到我时,我希望这些元素能够获取新数据,但这并没有发生。
为了解决这个问题,我需要在下层显式重新绑定数据:
gElements.selectAll("circle")
.data(function(d) { return [d]; }
.enter().append("circle");
它处理创建案例和后续重新绑定。但它似乎有点多余,因为返回[d]本质上是从父元素的初始继承数据自动发生的。
这种方法是解决这个问题的正确方法吗,还是我在这里感到困惑?
答案 0 :(得分:17)
当您通过selection.data将数据绑定到元素时,它会更新绑定到这些元素的数据。但是,不会自动将新数据传播到后代元素;你必须自己做。
当您调用与selection.select对应的selection.append时,来自父级的数据将绑定到每个所选元素的所选子级。当您调用selection.selectAll时,数据未绑定,因此您必须随后调用selection.data将新数据绑定到子项。
如果没有更多的背景,很难回答你的问题。如果您更新了gElements
上的数据,并且每个G元素包含一个圆圈,则可以使用selection.select将数据从父G传播到子圆:
gElements.select("circle");
您编写的代码段仅在您想要创建一个新圆圈时才会使用,如果缺少圆圈。这在Thinking with Joins中有所描述。您要编写的确切代码可能取决于它是在输入和更新时执行,还是仅在更新时执行。