Ich habe für jedes Datenelement ein SVG-Element erstellt. Nun möchte ich jedem Svg ein Pfadelement hinzufügen, aber wenn ich die Daten aktualisiere, dupliziert es dasselbe, anstatt dasselbe Element zu verwenden. Wie verhindere ich das?So verhindern Sie, verschachtelte Elemente bei der Aktualisierung mit D3.js zu duplizieren
Meine Daten sieht etwa so aus:
var dataset = [
{"id": 1, "goalPct": 1, "curPct": 0.5},
{"id": 2, "goalPct": 1, "curPct": 0.25},
{"id": 3, "goalPct": 1, "curPct": 0.74}
];
var dataset2 = [
{"id": 1, "goalPct": 1, "curPct": 0.74},
{"id": 2, "goalPct": 1, "curPct": 0.5},
{"id": 3, "goalPct": 1, "curPct": 0.25}
];
nun aus diesen Daten ich ein svg Element erstellt haben. Dies funktioniert genau so, wie es sollte, beim Update-Aufruf (wenn ich die neuen Daten einlege), wird es nicht dupliziert. Code:
var svg = container.selectAll("svg").data(data);
svg.enter()
.append("svg");
svg.exit().remove();
svg.transition().duration(750)
Von hier aus möchte ich einen Weg Element zu diesen svg Elemente anzuhängen, aber wenn ich die neuen Daten in schieben, es hängt nur einen neuen Weg Element statt es mit den neuen Daten zu aktualisieren. Ich kann die .data (data) -Funktion nicht zu den Pfadelementen verwenden, denn wenn ich dies tue, erstellt es einen Pfad für jedes Datenelement auf jeweils svg. (Wenn ich beispielsweise 2 Datenelemente und 3 SVGs habe, erzeugt es 2 Pfadelemente auf jedem der 3 SVGs). . Code:
var arc = svg.append("path")
.attr({
"d": function (d, i) {
bronzeArc.endAngle((2 * Math.PI) * d.CurPct);
return bronzeArc();
}
});
Ich habe versucht, die svg.exit bewegen() entfernen(); herum und das hilft mir nicht weiter. Irgendwelche Vorschläge?
Ich bin mir nicht ganz sicher, ob ich dem folge, was Sie erreichen wollen. Könntest du das mit einem Codepen oder JFiddle machen? – rcheuk
@rcheuk http://jsbin.com/wiqalixudu/edit?js,output Es wird mehr Sinn machen, wenn Sie in der Lage sind, F12 es, weil Sie in der Lage sein zu sehen, was ich rede, wenn ich sage, es ist häufen die Elemente an. Im Wesentlichen sollten die 2 Kreise Winkel wechseln, aber stattdessen ändert sich nur 1 der Kreise, weil die Elemente sich gerade übereinander stapeln. Der Grund 1 ändert sich, weil die neuen Daten größer als die letzten sind. Macht das etwas mehr her? – James