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