2016-01-18 1 views
0

В this example, где каждый ведет меня, то код писатель повторно asigns УАК link и node в методе start(). Я не понимаю, почему. Поскольку оба snipets идентичны, я остановлюсь на одном:Почему я должен повторно Asign ссылки и узлов при обновлении макета d3.js силы

link = link.data(force.links(), function(d) { return d.source.id + "-" + d.target.id; }); 
link.enter().insert("line", ".node").attr("class", "link"); 
link.exit().remove(); 

Q 1: link уже asigned в var link = svg.selectAll(".link"); означающего link содержит все элементы DOM в svg контейнер классифицирован .link. Этот выбор может быть пустым в начале примера, но почему он повторно ссылается на все ссылки в силе?

Вопрос 2: Почему он возвращает d.source.id и d.target.id? Нужно ли идентифицировать ссылку?

Q 3: Другие манипуляции (например, добавить цвет к ссылке) будут выполнены следующим образом?

link.enter().insert("line", ".node").attr("class", "link").style("stroke", function(d) { 
    return d.color; 
}); 

ответ

1

Вопрос 1:

Как вы изначально сказал, что его пустой var link = svg.selectAll(".link"); Но когда данные поступают в функции start эта переменная содержит все текущие ссылки.

Вопрос 2

Q 2: Почему он возвращает d.source.id и d.target.id недвижимость? Нужно ли идентифицировать ссылку?

link.data(force.links(), function(d) { return d.source.id + "-" + d.target.id; }); 

Это делается для однозначной идентификации ссылки. Функция возвращает уникальный идентификатор ссылки, которая представляет собой комбинацию исходного и целевого идентификаторов. Нужно, чтобы функция выхода знала после пересечения, какая ссылка должна быть удалена.

Вопрос 3

Q 3: Другие манипуляции (например, добавить цвет к ссылке) будет сделано, как это?

link.enter().insert("line", ".node").attr("class", "link").style("stroke", function(d) { 
    return d.color; 
}); 

Да! если данные канала имеют переменный цвет в нем. Что-то вроде этого {source: a, target: b, color:"red"} кода here

Надеется, что это помогает!

Смежные вопросы