在可折叠的 TreeMap 中 https://bl.ocks.org/mbostock/4339083我想进行服务器调用来接收其他子项并将它们附加到我加载的现有 JSON 中。
我可以在单击时执行此操作,但是当我收到返回的 JSON 时,如何可靠地获取被单击节点的正确索引并在单击时更新 JSON。
JSON 中子级的深度与 function(d) { return d.depth } 直接关联 但在该深度点击哪个子项的索引似乎是问题所在。
表面上看起来很简单,您可以使用 d3 中 function(i) 给出的索引,但它会根据打开和关闭的节点而变化。 (打开和关闭笔中的几个节点并观察其更新)
我可以利用 d3 中的某种查找功能或其他索引功能吗?
depth: 2 = children.children
如何获得 x
root.children[x].children[x].children = childArray;
在示例中只有一层子层,但这需要递归地工作,以便可以单击每个节点来访问更多数据。
完整示例在这里(第 264 行): http://codepen.io/pjbrof/pen/kXzGpd
root.children[0].children[0].children = childArray;
update(root);
最佳答案
根据我的经验,传递给任何 D3 访问器函数的索引始终是它在 DOM 中的索引,相对于它的父级:https://github.com/d3/d3-selection/issues/73
我针对此场景使用的解决方法是在点击事件中实现对象查找或数组过滤器,匹配唯一 ID。
关于javascript - 无法获取在 d3 中单击的节点的正确索引并更新该位置的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983905/