2013-02-22 7 views
15

Ich habe eine bestehende Svg mit einer Reihe von Polygonen. Jedes Polygon hat eine eindeutige ID, und mit jeder ID habe ich einige zugehörige Daten.stellen Sie sicher, d3 Datenelement entspricht ID?

Meine Frage ist: Wenn ich die natürliche d3 trete:

d3.selectAll("polygon").data(array_of_data) 

Gibt es trotzdem, um sicherzustellen, dass das Datenelement mit einem Polygon verbunden ist, ist die richtige?

Oder muss ich nur die Reihenfolge der array_of_data die gleiche wie die Reihenfolge der ausgewählten Polygone?

Antwort

22

Die Funktion data() von D3 verwendet ein optionales zweites Argument, das eine solche Übereinstimmung zwischen Datums- und DOM-Knoten bereitstellen soll. Versuche das:

d3.selectAll('polygon').data(array_of_data, function(d) { return d.id; }); 

Das zweite Argument data() eine Callback-Funktion ist, die, wenn sie mit einem Nullpunkt genannt wird, den Schlüssel zurückgibt, die jeden Knoten DOM bindet an das entsprechende Datum ist. Wenn Sie keine solche Funktion bereitstellen, bleibt D3 keine andere Wahl, als den Index zum Binden des Datums an DOM-Knoten zu verwenden.

+0

Wie geben Sie an, welches Element mit dem angegebenen Schlüssel übereinstimmen soll? Wie weiß d3, dass es das ID-Feld ist, das d.id passen sollte? oder tut es? – Maus

+0

Alle d3 bedeutet, dass immer dasselbe Element für ein bestimmtes Datum verwendet wird. Das ID-Attribut des Elements wird nicht gesetzt, wenn Sie das fragen. Es wird nur intern ein Element dem angegebenen Schlüssel zugeordnet. Wenn Ihre Daten alle ID-Eigenschaften haben, verwenden Sie den obigen Code. Wenn Ihre Daten stattdessen eine andere Möglichkeit haben, die eindeutige ID zu bestimmen, können Sie dies stattdessen innerhalb des Callbacks tun: 'function (d) {return d.getUniqueId(); } ' –

+4

also, wenn meine Polygone bereits einen Namen haben, gibt es keine Möglichkeit, d3 zu sagen, dass das Datum mit dem gleichen Namen mit diesem Polygon übereinstimmt? – Maus

Verwandte Themen