2013-07-03 27 views

Odpowiedz

27

Nazwa klasy podać nie musi być stałe, to znaczy nie można mieć coś podobnego function(d) { return d; }. Jeśli potrzebujesz, aby nazwa klasy została określona na podstawie danych, musisz użyć .attr("class", ...).

Jeśli martwisz się o nadpisanie istniejących nazw klas należy pamiętać, że można pobierać i poprzedzić tych następująco.

.attr("class", function(d) { return d3.select(this).attr("class") + " " + d; }) 
+0

To, co robi obecnie, udaję nazwy klas dokładnie. Właśnie zastanawiałem się, czy jest jakikolwiek bezpośredni sposób to zrobić. Dzięki za twoją odpowiedź. –

+7

Dla przypomnienia, jest tutaj istotne prośba przyciąganie zaimplementować to korzystając klasyfikowany, a przyczyną tego, że został odrzucony - https://github.com/mbostock/d3/pull/1072 – Sam

+0

Jeśli chcesz to zrobić za pomocą funkcji strzałki aby "this" wskazywał na to, co znajduje się poza tą funkcją, możesz to zrobić np. '.attr ('class', (d, i, nodes) => d3.select (nodes [i]). attr ('class') + '' + this.someMethod (d)) ' – user568458

4

I napotkał podobny problem, w którym chciałem dodać jedną klasę, jeśli właściwość na moim odniesienia była prawda i inną klasę, jeżeli nieruchomość była fałszywa:

selection.classed('class-one', function(d) { return d.property; }) 
    .classed('class-two', function(d) { return d.property; }); 

Jeśli masz mały liczba klas, które można dodać, coś takiego może być warte rozważenia.

0

podobne do sugerowanej odpowiedzi, ale znalazłem

selection.each(function(d) { d3.select(this).classed(d.class, true) 

również działa.

1

Lars odpowiedź brzmi świetnie, ale jeśli zaczniesz się bez klasy z atrybutem będzie dodać klasę „null” do elementu jako null atrybut jest zmuszony do łańcucha. Naturalnym krokiem z jego:

.attr("class", function(d) { 
     var existing = d3.select(this).attr("class") 
     if (existing == null){ 
     return d.column.class 
     }else{ 
     return existing + " " + d.column.class 
     } 
}) 

To może być wykonane w jednym-liner z operatorem potrójnego jeśli chcesz go bardziej zwięzły

Powiązane problemy