2013-02-22 14 views
15

Ho uno svg esistente con un gruppo di poligoni. Ogni poligono ha un ID univoco, e con ogni id, ho alcuni dati associati.assicurati che l'elemento dati d3 corrisponda a id?

mia domanda è questa: se faccio la d3 join naturale:

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

Esiste un modo per assicurare che l'elemento di dati associati con un poligono è quello giusto?

Oppure devo semplicemente mantenere l'ordine dello array_of_data uguale all'ordine dei poligoni selezionati?

risposta

22

La funzione data() di D3 accetta un secondo argomento facoltativo che è destinato a fornire solo una corrispondenza tra origine e nodi DOM. Prova questo:

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

Tale secondo argomento data() è una funzione di callback che, quando chiamato con un dato, restituisce la chiave che lega ogni nodo DOM ad esso è dato corrispondente. Quando non si fornisce tale funzione, D3 non ha altra scelta se non quella di utilizzare l'indice per associare un dato ai nodi DOM.

+0

come si specifica quale elemento deve corrispondere alla chiave specificata? In che modo d3 sa che è il campo ID che d.id dovrebbe corrispondere? o lo fa? – Maus

+0

Tutto ciò che d3 fa è assicurarsi che lo stesso elemento sia sempre usato per un dato dato. Non imposta l'attributo id dell'elemento se è quello che stai chiedendo. Mappa internamente un elemento alla chiave specificata. Se i tuoi dati hanno tutti le proprietà .id, allora usa il codice sopra. Se invece i tuoi dati hanno un altro modo per determinare l'id univoco, puoi farlo invece all'interno del callback, in questo modo: 'function (d) {return d.getUniqueId(); } ' –

+4

quindi se i miei poligoni hanno già un nome, non c'è modo di dire a d3 che il dato con lo stesso nome corrisponde a quel poligono? – Maus

Problemi correlati