【发布时间】:2020-03-02 20:00:58
【问题描述】:
我正在尝试更新节点和链接,但不想使用 d3 的输入模式。原因是我希望 svelte 框架来执行此操作并处理所有渲染,我只想使用 d3-force 进行计算。
我让初始渲染工作正常,但添加链接和节点有以下问题:
- 添加链接使网络增长
- 链接似乎对图形布局没有任何影响,即它们似乎没有被添加到 force.simulation
- 首先添加节点似乎可以工作,但是在添加链接后添加节点时,它们似乎不会对其他节点施加力。
这是我添加节点和链接的函数:
function addNode(){
force.forceSimulation(data.nodes.push({"id": "116", "group": 5, "index":data.nodes.length, "x":0, "y":0, "vx":0, "vy":0}))
data=data
graph.alpha(1.0).update()
graph.restart()
}
function addLink(){
let n=getRandomInt(0, data.nodes.length-1)
let tn=getRandomInt(0, n)
let sn=getRandomInt(n, data.nodes.length-1)
graph.force("link", force.forceLink(data.links.push({'source':data.nodes[sn], 'target':data.nodes[tn],'index':data.links.length, 'value':getRandomInt(1, 7)})))
data=data
graph.alpha(1.0).update()
graph.restart()
}
我找到了this 的答案,但他们使用合并并将其绑定到 DOM 元素。我不明白如何在不涉及 DOM 的情况下做到这一点,只需更新 javascript 中的节点和链接数组以使 d3-force 将其包含在模拟中。
Here我在一个苗条的 REPL 中有当前的模拟,你可以 fork 和编辑它。
【问题讨论】:
标签: d3.js force-layout svelte