2013-04-10 6 views
2

У меня возникли проблемы с выполнением основной операции в d3: обновление дочерних элементов для изменяющегося набора данных. Детский элемент должен быть «добавлен» для первого прохода и изменен для последующих проходов. Для родительского элемента, который можно управлять с помощью операции «ввести», но я не вижу, как его использовать для детей. Я использую макет пузыря, но я не думаю, что это проблема.Обновление дочерних элементов данных в d3.js

var node = vis.selectAll("g.node").data(
bubble.nodes(classes(json)).filter(function (d) { 
    return !d.children; 
}), function (d) { 
    return d.className; 
}); 

node.select("circle").attr("r", function (d) { 
    return d.r; 
}); 

node.enter().append("g").attr("class", "node") 
    .attr("transform", function (d) { 
    return "translate(" + d.x + "," + d.y + ")"; 
}); 

node.append("circle").attr("r", function (d) { 
    return d.r; 
}); 

Вот jsfiddle http://jsfiddle.net/johnpoole/xsafy/131/ с кодом бега.

+0

Непонятно, что вы пытаетесь сделать. Группа, которую вы добавляете к «родительскому», как представляется, не используется ни для чего, и круги, по-видимому, не будут выбраны при обновлении. Чего вы пытаетесь достичь? –

+0

Спасибо за ответ. Я пытаюсь создать макет пузыря и изменить радиус кругов во время обновления. Круг/дочерний элемент добавляется к узлу/родительскому объекту для отображения круга и его радиуса. Проблема не в выборе кругов во время обновления (со ссылкой на новый радиус). –

+0

Почему вы добавляете элементы 'g'? Просто добавить круги должно быть достаточно. –

ответ

3

Ответ в конечном итоге пришел ко мне. Речь идет только об исходном «добавлении» к результату ввода()

var node = vis.selectAll("g.node").data(
    bubble.nodes(classes(json)).filter(function(d) { 
     return !d.children; 
    }), function(d) { 
     return d.className; 
    }); 

node.select("circle").attr("r", function(d) { 
     return d.r; 
    }).style("fill", function(d) { 
     return fill(d.r); 
    }); 

node.enter().append("g").attr("class", "node") 
.attr("transform", function(d) { 
     return "translate(" + d.x + ","+ d.y +  ")";}) 
    .append("circle").attr("r", function(d) { 
     return d.r; 
}).style("fill", function(d) { 
     return fill(d.className); 
});         
+0

У вас есть скрипка с вашими обновлениями, используя приведенный выше код? – snowgage

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