Я работаю над графиком, ориентированным на силу в D3. Я хочу выделить mouseover'd node, его ссылки и его дочерние узлы, установив все остальные узлы и ссылки на меньшую непрозрачность.
В этом примере http://jsfiddle.net/xReHA/, я могу погасить все ссылки, а узлы затем исчезают в связанных ссылках, но, до сих пор я не мог элегантно исчезать в связанных узлах, являющихся дочерними элементами текущего mouseover'd node.
Это ключевая функция из кода:
function fade(opacity) {
return function(d, i) {
//fade all elements
svg.selectAll("circle, line").style("opacity", opacity);
var associated_links = svg.selectAll("line").filter(function(d) {
return d.source.index == i || d.target.index == i;
}).each(function(dLink, iLink) {
//unfade links and nodes connected to the current node
d3.select(this).style("opacity", 1);
//THE FOLLOWING CAUSES: Uncaught TypeError: Cannot call method 'setProperty' of undefined
d3.select(dLink.source).style("opacity", 1);
d3.select(dLink.target).style("opacity", 1);
});
};
}
Я получаю ошибку Uncaught TypeError: Cannot call method 'setProperty' of undefined
, когда пытаюсь установить непрозрачность элемента, загруженного из source.target. Я подозреваю, что это неправильный способ загрузить этот node в качестве объекта d3, но я не могу найти другой способ загрузить его, не повторяя все узлы, чтобы найти те, которые соответствуют цели или источнику ссылки. Чтобы поддерживать работоспособность, я не хочу перебирать все узлы больше, чем необходимо.
Я взял пример затухания ссылок из http://mbostock.github.com/d3/ex/chord.html:
Однако это не показывает, как изменить связанные дочерние узлы.
Любые хорошие предложения о том, как решить или улучшить это, будут яростно поддержаны:)