wąska dynamiczna klasa warunkowa [zamknięta]


100

Tylko po to, aby pomóc innym programistom, ponieważ nie ma podobnego pytania w SO.

div class=(is_active? ? 'active' : 'inactive')
div class=('active' if is_active?)

Odpowiedzi:


144

Zobacz przykłady poniżej:

div class=(is_active? ? 'active' : 'inactive')
div class=('active' if is_active?)

To samo podejście można zastosować do przypisania wartości dynamicznych innym atrybutom.


2
Jak byś to zrobił dla wielu warunków?
Maxim Zubarev

Zobacz poniżej w komentarzach do swojej odpowiedzi.
Sergey Alekseev

3
Może to również dołączyć klasę, taką jak: div.councilor class=(councilor.retired? ? "retired" : "") generuje:div.councilor.retired
Terra Ashley

20

Używam tablicy klas i elementu nil, jeśli nie ma potrzeby umieszczania klasy na liście, a następnie tablicy kompaktowej, aby usunąć elementy zerowe i ostatecznie połączyć wszystkie razem.

div class=(["cday", "col-md-1", day.day == 1 ? "col-md-offset-#{day.cwday-1}" : nil].compact.join(' '))

12

Jeśli masz wiele warunków, robię teraz coś takiego

div class=(('foo ' if is_foo?) + ('bar' if is_bar?))

Chociaż uważam, że to skaza, jeśli is_bar? zwraca false, a wygenerowany kod HTML powoduje

<div class="foo "></div>

(skaza to pusty znak po foo). Gdyby ktoś miał na to rozwiązanie, byłoby super.


7
Spróbuj String#rstripw tym przypadku z 2 warunki: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Lub div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))pod kilkoma warunkami.
Sergey Alekseev
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.