0

首先,为有效地向我的最后一个问题(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 ') 直接地。

烦人的事情是两个小提琴在最初的平局中都能正常工作。这是打破两者的更新。

有什么建议么?

谢谢

- 克里斯

4

1 回答 1

1

我玩了很多之后自己回答了。我在小提琴中修复了一个相当大的错字,它仅对添加小提琴没有帮助,因为我从 for 循环中复制了一些文本并且没有替换循环中的变量(在 setInterval 中,我将节点添加到数组)

node_hash[key] = a;

变成

node_hash["REMOTE"] = a;

这实际上不是问题,也没有影响删除小提琴。我仍然不确定为什么它以前只引用“vis”就不起作用,但我重新设计了小提琴,现在它们添加和删除很好。

添加的固定小提琴是http://jsfiddle.net/zuzzy/fmkC5/5/

移除的固定小提琴是http://jsfiddle.net/zuzzy/wqS3G/3/

于 2013-05-29T11:51:17.950 回答