Iterar sobre nodos ya creados en D3js
Estoy usando un gráfico dirigido por la fuerza y estoy agregando nodos recién creados al gráfico. Esto funciona perfectamente bien.
Mi nodo tiene una propiedad llamada "estado" que sigue cambiando. El problema al que me enfrento es que, en mi código, la condición para verificar el "estado" solo se verifica cuando entra un nuevo nodo. Cuando hay una actualización, mi JSON se actualiza con el estado pero la ejecución no alcanza El código para verificar el estado.
Encuentra mi código a continuación:
function buildGraph() {
// Update link data
link = link.data(links);
// Create new links
link.enter().append("g")
.attr("class", "link")
.each(function (d) {
d3.select(this)
.append("line")
.attr("stroke", "#000")
.attr("stroke-width", 2)
.attr("opacity", 0.3);
});
// Delete removed links
link.exit().remove();
// Update node data
node = node.data(nodes);
// Create new nodes
node.enter().append("g")
.attr("class", "node")
.each(function (d) {
if (d.state == "0") { // doesn't come here after an update
var imgId = d.name;
d3.select(this).append("svg:image")
.attr("class", "spinner")
.attr("id", imgId)
.attr("xlink:href", "Images/icons/ajax-loader.gif")
.attr("x", "+16px")
.attr("y", "-16px")
.attr("width", "20px")
.attr("height", "20px");
} else if (d.state == "1") {
var imgId = "#" + d.name;
d3.select(imgId).remove();
} else if (d.state == "3" || d.state == "4") {
//d3.select(this)
// .style("opacity", 0.4);
d3.select(this)
.style("filter", function (d, i) {
if (i % 2 == 0) {
return ("filter", "url(#desaturate)");
} else {
return "";
}
});
}
d3.select(this).append("text")
.attr("dy", ".50em")
.attr("text-anchor", "end")
.attr("font-size", "15px")
.attr("fill", "black")
.text(function (d) { return d.name; });
d3.select(this).call(force.drag);
})
//.call(force.drag)
.on('mouseover', tip.show)
.on('mouseout', tip.hide);
// Delete removed nodes
node.exit().remove();
//debugger;
force.start();
}
Entiendo que en este momento, solo está iterando sobre nuevos nodos. ¿Puede alguien decirme cómo iterar sobre los nodos existentes también?
Gracias por adelantado.