2012-03-25 9 views
35

Ich mache eine Umschaltung in d3, und versuchen, globale Variablen zu vermeiden.korrekte Weise zu sagen, ob meine Auswahl alle vorhandenen Elemente gefangen

kann ich voran gehen und wählen Sie den Punkt, als ob es bereits in der Szene war:

d3.select('#awesome_line_graph') 

und dann testen, um zu sehen, ob ich etwas

if (d3.select('#awesome_line_graph')[0].every(function(d){return d===null})){ 
    // draw awesome line graph 
} else { 
    d3.select('#awesome_line_graph').remove() 
} 

aber diese Tests für die Verwendung gefangen Nulles Element für vielleicht mehr als ein Null-Ding scheint schrecklich und hacky. Wie sollte ich es stattdessen tun? Entschuldigungen für nicht viel Javascript zu wissen.

Antwort

66

Verwenden Sie selection.empty(). Wenn die Auswahl leer ist, müssen Sie sie auch nicht entfernen.

+6

Eigentlich sollte es 'selection.empty()' sein, es ist ein Funktionsaufruf, nicht wahr? – benjaminz

2

Ich empfehle Ihnen, Mike Bostock D3 Workshop Dokument zu lesen. Darin spricht er darüber, wie eine Auswahl ein Array von Elementen zurückgibt, die den Auswahlkriterien entsprechen. Wenn die Länge des Arrays größer als "0" ist, sind Sie also ordnungsgemäß zugeordnet und ausgewählt. Sie können auch die Dokumentation zu "Nested Selections" lesen. Ich fand es sehr nützlich.

Ich hoffe, das hilft.

Frank