Как проверить, есть ли у узла дети, и установить заливку круга белым, если детей нет?
В настоящее время используется:
var colourScale = d3.scale.ordinal()
.domain(["MD", "Professional", "Leader", "Advocate", "Clinician"])
.range(["#6695c8", "#cd3838", "#d48440", "#a8ba5f", "#63b7c0"]);
nodeUpdate.select("circle")
.attr("r", 10)
.attr("fill-opacity","0.7")
.attr("stroke-opacity","1")
.style("fill", function(d) {
return colourScale(findParent(d));
})
.style("stroke", function(d) {
return colourScale(findParent(d));
});
nodeUpdate.select("circle")
.attr("r", 10)
.attr("fill-opacity", "0.7")
.attr("stroke-opacity", "1")
.style("fill", function(d) {
console.info(d);
return (typeof d._children !== 'undefined') ? (colourScale(findParent(d))) : '#FFF';
})
.style("stroke", function(d) {
return colourScale(findParent(d));
});
Редактировать:
Проблема здесь в том, что ваш первый узел имеет не атрибут _children
, а атрибут children
. Потому что дочерние элементы добавляются при нажатии (_children становится пустым, а дочерние элементы принимают значение. Измените его, и все будет в порядке)
@IlludiumPu36 обратите внимание, когда вы нажимаете на пустой узел, так как он пустой _children и заполняет дочерние элементы, узел получает цвет, я думаю, вам нужно прекратить менять местами дочерние элементы и _children, или проверить, определен ли он И если длина равна 0, как
typeof d._children !== 'undefined' && d._children.length != 0
(потому что он проверяет, был ли он определен ранее, это не вызовет ошибки