Javascript 如何将绑定数据传递给D3中的嵌套选择?

Javascript 如何将绑定数据传递给D3中的嵌套选择?,javascript,d3.js,Javascript,D3.js,我正在尝试使用D3选择器构建和更新表,但在创建后更新行时遇到问题。下面的代码试图将表中的行绑定到一些传入的[Object],每个行都有名称和值字段 使用正确的数据正确地创建行。更新选择确实发生,并且调用了我的处理程序,但是提供给上面UpdateBind.selectAll.text的匿名函数的数据是旧的,永远不会更改 我可以不依赖绑定上的嵌套选择来包含我在这里使用的最新数据吗 有没有更好的方法来更新嵌套元素,比如我的s?小提琴会很有帮助。你能澄清一下吗..提供给匿名函数的数据是旧的,永远不会更改

我正在尝试使用D3选择器构建和更新表,但在创建后更新行时遇到问题。下面的代码试图将表中的行绑定到一些传入的[Object],每个行都有名称和值字段

使用正确的数据正确地创建行。更新选择确实发生,并且调用了我的处理程序,但是提供给上面UpdateBind.selectAll.text的匿名函数的数据是旧的,永远不会更改

我可以不依赖绑定上的嵌套选择来包含我在这里使用的最新数据吗


有没有更好的方法来更新嵌套元素,比如我的s?

小提琴会很有帮助。你能澄清一下吗..提供给匿名函数的数据是旧的,永远不会更改吗?正在调用的匿名函数是什么?是否存在任何控制台错误?上面的UpdateBind.selectAll'td'生成的选择不会在随后的.text调用中向函数提供当前数据。显然,selectAll在应用新绑定之前访问父对象的数据。我已经修改了代码,在tr选择上手动调用html,这是可行的。如果没有人能给我指出更新表行的更规范的方法,我将自己发布该方法,作为其他人查找的答案。让我惊讶的是,d3中没有一个规范的表更新示例。在向表中添加新行之后,您似乎没有更新您的d数据。据我所知,D3并没有像angular或knockout那样进行双向绑定。我建议编写一个函数,在添加数据时重构表数据,并在添加新行时调用它。请参阅。
var table = d3.select("#dataTable");

var binding = table.selectAll("tr.data")
  .data(data, function(d) {
    return d.name;
  });

var enterBinding = binding.enter();
var updateBinding = binding;  

updateBinding.selectAll("td").text(function(d) {
  if(d3.select(this).classed("name")) {
    return d.name;
  } else {
    return d.value;
  }
});

var newRows = enterBinding.append("tr").classed("data", true);
newRows.append("td")
  .classed("name", true)
  .text(function(d) {
    return d.name;
  });
newRows.append("td")
  .classed("value", true)
  .text(function(d) {
    return JSON.stringify(d.value);
  });