В настоящее время я работаю над силовым моделированием. Here's the fiddle если вам это нужно. Данный раздел дает мне немного хлопот - я пытаюсь его ссылку и не узлы, где ситуация похожа, так что мы можем увидеть разницу работы и нерабочий:D3.js - что такое selection.call() возвращение?
function linkRender(selection) {
selection
.data(links)
.enter().append("line")
.attr("stroke-width",2)
.attr("stroke","black")
}
let link = svg.selectAll("line").call(linkRender);
Здесь call()
должен возвращать выбор, то есть линии связи. Однако, при визуализации ссылок в selection.on()
, если я использую переменную link
работать, он не делает должным образом, к своему огорчению:
simulation.on("tick",byFrame);
function byFrame() {
// This doesn't work!
link
.attr("x1", d => d.source.x)
.attr("y1", d => d.source.y)
.attr("x2", d => d.target.x)
.attr("y2", d => d.target.y)
// But this works!
svg.selectAll("circle")
.attr("cx",d => d.x)
.attr("cy",d => d.y)
}
И если я назначу переменную link
к linkRender()
старому, то есть,
let link = linkRender(svg.selectAll("line"))
до тех пор, как я установил linkRender()
вернуть код внутри (return selection.data(links).etc
), визуализация работает отлично.
Наконец, вот сравнение link
и svg.selectAll("line")
:
Так что я хотел бы знать, что происходит. Заранее спасибо!