在d3.js嵌套数据联接中,如何访问早期联接中的数据?

在d3.js嵌套数据联接中,如何访问早期联接中的数据?,d3.js,nested,D3.js,Nested,我已经创建了一个d3.js页面,其中显示了一组带有x,y坐标的图形节点,但是我在每个外部节点中使用了d3的包布局 我有生成此页面的功能代码,它如下所示: d3.json("knowledge.json", function(error, graphNodes) { if (error) return console.error(error); graphNodes.forEach( function (graphNode) { var innerNodes = pack.no

我已经创建了一个d3.js页面,其中显示了一组带有x,y坐标的图形节点,但是我在每个外部节点中使用了d3的包布局

我有生成此页面的功能代码,它如下所示:

d3.json("knowledge.json", function(error, graphNodes) {
  if (error) return console.error(error);

  graphNodes.forEach( function (graphNode) {

    var innerNodes = pack.nodes(graphNode);

    svg.selectAll(".node")
        .data(innerNodes, function(d) {return d.id})
      .enter().append("circle")
        .style("fill", function(d) {return color(d.depth);})
        .attr("class", "node")
        .attr("cx",  function(d) {return (d.x + graphNode.xOffset);}) 
        .attr("cy",  function(d) {return (d.y + graphNode.yOffset);})
        .attr("r",   function(d) {return d.r;});
  });
});
这是可行的,但令人不满意,因为我使用的是JavaScript的.forEach,而不是带有嵌套联接的数据驱动方法。下面是一个嵌套联接示例:

d3.json("knowledge.json", function(error, data) {
    if (error) return console.error(error);

    var groups = svg.selectAll(".node")
        .data(data)
      .enter().selectAll("circle")
        .data(function (d) { return pack.nodes(d); })
      .enter().append("circle")
        .style("fill", function(e) { return color(e.depth); })
        .attr("class", "node")
        .attr("cx", function(e) {return e.x;})
        .attr("cy", function(e) {return e.y;})
        .attr("r", function(e) {return e.r;});
});
请注意,我在这里使用了两次.data,首先在外部图形上,然后在从图形的每个节点生成的包上。但是,这并不考虑外部节点的xOffset和yOffset。如何从第二个联接内部获取第一个联接的数据?虽然scope使以下内容变得不可能,但我希望在最后三行中使用类似的语法:

        .attr("cx", function(e) {return d.xOffset + e.x;})
        .attr("cy", function(e) {return d.yOffset + e.y;})
        .attr("r", function(e) {return e.r;});

感谢您能分享的任何见解

使用秘密的第三个参数:Lars所说的,另外,如果DOM节点嵌套并以与数据层次结构相对应的方式绑定到数据,那么您可以使用例如.attrcx,functione{var d=d3.selectthis.parentNode.datum;返回d.xOffset+e.x;}。同样,这假设父DOM节点绑定到您要查找的数据。谢谢,Lars和meetamit。这些都是非常有用的技巧!拉尔斯,如果我有足够的声誉,我会投票支持你的链接答案。很抱歉