Stworzyłem tabelę donut d3. Oto mój kod:D3: Jak odświeżyć wykres z nowymi danymi?
var width = 480;
var height = 480;
var radius = Math.min(width, height)/2;
var doughnutWidth = 30;
var color = d3.scale.category10();
var arc = d3.svg.arc()
.outerRadius(radius - 10)
.innerRadius(radius - 70);
var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d[1]; });
var dataset = settings.dataset;
console.log(dataset);
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width/2 + "," + height/2 + ")");
var path = svg.selectAll('path')
.data(pie(dataset))
.enter()
.append('path')
.attr('d', arc)
.attr('fill', function(d, i) {
return color(d.data[0]);
})
Mam prosty formularz na mojej stronie internetowej, który wyświetla rozwijane menu z kilkoma opcjami. Za każdym razem, gdy użytkownik zmienia wartość w formularzu, nowy zestaw danych jest wysyłany do mojego skryptu (settings.dataset), a pączek jest przerysowywany na stronie.
Problem polega na tym, że niektóre wartości z poprzedniego zestawu danych pozostają w DOM. W poniższym wyjściu konsoli widać, że drugi zestaw danych zawiera tylko dwa elementy. Trzeci pochodzi z poprzedniego zestawu danych. To psuje wykres, ponieważ wyświetla wartość, której nie powinno tam być.
Moje pytanie: w jaki sposób mogę wyczyścić stare wartości? Przeczytałem na numerach .exit()
i .remove()
, ale nie mogę zrozumieć tych metod.
, więc kod, który wkleiłeś powyżej, zostanie wykonany za każdym razem na udate? – Cyril
Tak, skrypt jest wywoływany za każdym razem, gdy użytkownik wybiera inną opcję w moim formularzu. – 24ma13wg
Jeden problem, jaki widzę, to d3.select ("body") .append ("svg") oznacza, że dodajesz svg za każdym razem przy aktualizacji. wykonaj d3.select ("svg"). remove(), aby upewnić się, że został usunięty przy aktualizacji. – Cyril