Я использую принудительную компоновку D3 и добавляю код, позволяющий пользователю выбирать отдельные узлы (здесь выбор не связан с D3 select(), но указывает на выделенное состояние узла с точки зрения пользователя). Одновременно должен быть выбран только один узел. Итак, когда пользователь нажимает на узел, который не выбран, я хочу отменить выбор любых выбранных узлов.
Я использую выбранный атрибут на узле и пытаюсь установить его, используя метод D3 data(...) или datum(...). На самом деле, я не мог заставить его работать так. То, что у меня есть сейчас, кажется немного глупым, поэтому я надеюсь, что есть более чистый способ.
function deselectAll() {
var sc = d3.selectAll("circle")
.filter(function(d) {return (d.selected == "y")});
var circles = sc.data();
sc.transition()
.duration(50)
.style("stroke-width", "1px")
.style("stroke", "#3182bd");
if(null != circles && circles.length > 0) {
for(i=0; i<circles.length; i++) {
circles[i].selected = "n";
}
}
}
Проблема в том, что добавление .data("n") в цепочку не устанавливает для "selected" значение "n". Возможно ли это сделать как часть цепочки d3?