首先,为有效地向我的最后一个问题(D3:node = vis.selectAll(".node")的问题)打开一个重复的问题向所有人道歉,但最初我认为我可以做到这一点,但它从来没有真正起作用。
这两个问题是相同的,所以在这个问题之前可能值得阅读另一个问题。
我遇到的问题是用新节点更新力布局。实际上,我每隔几秒钟就会调用一次 ajax 来获取更新的数据,并且我有大量代码来解析它并计算出发生了什么变化,或者通过节点数组(创造性地称为 nodeArray)添加新节点,并将新链接添加到我的链接数组(称为链接数组)。我还通过将文本标签作为节点(也在 nodeArray 中)与指向它们各自节点的链接在 linkArray 中有点混淆。
这次我没有尝试描述这个问题,而是创建了两个几乎相同的小提琴:
a) 添加一个节点 - 这个小提琴解析原始数据,然后在 5 秒后添加一个节点。( http://jsfiddle.net/zuzzy/dFd3H/2/ )
b) 删除一个节点 - 这个小提琴解析原始数据,然后在 5 秒后删除一个节点。( http://jsfiddle.net/zuzzy/wqS3G/1/ )
只需查找代码的以下部分:
setTimeout(function () {
//update the objects
...
},5000);
//----- functions for drawing and tick below
function draw() {
....
}
我遇到的问题是我处理这个问题的复杂方式。我能找到的所有示例要么具有使用我使用过的想法的静态布局,例如文本标签节点,要么它们是动态的,但它们只是使用带有圆圈的简单节点。实际上,我使它比小提琴更难,因为我不仅使用圆圈和文本标签,而且还在圆圈上覆盖了图像……但这对于小提琴示例来说太复杂了。因此,这些小提琴是我的代码的摘录(这也需要 Intranet 页面,因此在 jsfiddle 上无论如何都不起作用)所以如果它看起来令人费解和做作,请道歉。
我知道我做错了,我怀疑(希望?)问题的答案在两个小提琴中都是一样的。
我还期望问题存在于 draw() 函数中-我认为问题应该出在哪里,因为我与 svg 对象交互('vis ') 直接地。
烦人的事情是两个小提琴在最初的平局中都能正常工作。这是打破两者的更新。
有什么建议么?
谢谢
- 克里斯