schlanke dynamische bedingte Klasse [geschlossen]


100

Nur um anderen Entwicklern zu helfen, denn es gibt keine ähnliche Frage zu SO.

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

Antworten:


142

Siehe die folgenden Beispiele:

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

Der gleiche Ansatz kann verwendet werden, um anderen Attributen dynamische Werte zuzuweisen.


2
Wie würden Sie das für mehrere Bedingungen tun?
Maxim Zubarev

Siehe unten in den Kommentaren zu Ihrer Antwort.
Sergey Alekseev

3
Dies kann auch eine Klasse anhängen, wie zum Beispiel: div.councilor class=(councilor.retired? ? "retired" : "") erzeugt:div.councilor.retired
Terra Ashley

20

Ich verwende ein Array von Klassen und ein Null-Element, wenn keine Klasse in die Liste aufgenommen werden muss, und ein kompaktes Array, um Null-Elemente zu entfernen und schließlich alle zusammenzufügen.

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

12

Wenn Sie mehrere Bedingungen haben, mache ich gerade so etwas wie

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

Obwohl ich es für einen Makel halte, wenn is_bar? Geben Sie false zurück und der generierte HTML-Code führt zu

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

(Der Fehler ist das leere Zeichen nach dem foo). Wenn jemand eine Lösung dafür hätte, wäre das großartig.


7
Versuchen Sie es String#rstripin diesem Fall mit 2 Bedingungen : div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Oder div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))für mehrere Bedingungen.
Sergey Alekseev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.