2017-10-20 113 views
3

我在javascript /瓶初学者,我试图用这个实验D3树状图例如:https://bl.ocks.org/mbostock/4063570获得给定节点的父节点D3树状图

什么我试图得到的是,当一个节点被单击,将父节点返回到应用服务器。

例如:如果我display节点上单击,然后服务器获取“flare,display

如果点击cluster节点,则服务器获取“flare,analytics,cluster

+2

如果我正确地理解了这个问题,对于本例和其他人使用相同的方法创建的,datum属性'id'保存父节点名,'display'具有'flare.display'的id。所以你只需要用逗号替换句点,并使用点击事件来获取相关的ID并触发你需要的任何内容:https://bl.ocks.org/Andrew-Reid/raw/4358ca9989902fae71cf91b38dc4de56/ –

回答

2

我t很容易得到被点击的节点的父母。只要使用ancestors(),其中:

返回祖先节点的数组,从与该节点,则随后每个父到根。

所以,你的情况......

node.on("click", function(d){ 
    console.log(d.ancestors()) 
}); 

..将显示在控制台中的所有祖先,作为数组。

这里是分叉bl.ocks:https://bl.ocks.org/anonymous/e36d4af364642a70818987941aa192c8/c75e620e662a6899d8df34c287fc5ea00d049513

在该代码中,我映射阵列来获得每个节点的id财产。

+0

嗨,谢谢你响应.. noob问题..但如何/我在哪里指定服务器可以捕获此请求的网址? – Fraz

+0

那么,你在这里有两个截然不同的问题(这是在SO关闭的原因)。所以,现在你已经为第一个问题找到了答案,用相应的标签发布其他问题。 –

+0

感谢您的建议,我在这里发布了问题:https://stackoverflow.com/questions/46847130/how-to-send-the-click-data-from-d3-to-flask-server – Fraz

1

您可以通过点击数据递归:

var node = g.selectAll(".node") 
     .data(root.descendants()) 
    .enter().append("g") 
     .attr("class", function(d) { return "node" + (d.children ? " node--internal" : " node--leaf"); }) 
     .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; }) 
     //attach a click listener to the group 
     .on("click", function(d){ 
     var children = []; 
     //recursively call parent 
     var recurse = function(c){ 
      //recurse unless no parent is found 
      if (c.parent){ 
      children.push(c.parent.id); 
      recurse(c.parent) 
      } 
     } 
     recurse(d)//call recurse on clicked node 
     console.log(children) 
     //send children to server via AJAX 
     }) 

工作示例here