Vermeiden von Logik in den Ansichten
Das Problem beim Standardansatz besteht darin, dass Logik in Form von if
Anweisungen oder Ternären in der Ansicht erforderlich ist . Wenn Sie mehrere bedingte CSS-Klassen mit Standardklassen gemischt haben, müssen Sie diese Logik in eine Zeichenfolgeninterpolation oder ein ERB-Tag einfügen.
Hier ist ein aktualisierter Ansatz, bei dem keine Logik in die Ansichten eingefügt wird:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string
Methode
Der class_string
Helfer verwendet einen Hash mit Schlüssel / Wert-Paaren, die aus CSS-Klassennamenzeichenfolgen und booleschen Werten bestehen . Das Ergebnis der Methode ist eine Zeichenfolge von Klassen, bei denen der boolesche Wert als wahr ausgewertet wird.
Beispielnutzung
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
Andere Anwendungsfälle
Dieser Helfer kann innerhalb von ERB
Tags oder mit Rails-Helfern wie z link_to
.
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
<% div_for @person, class: class_string(ok: @success) do %>
<% end %>
<% link_to "Hello", root_path, class: class_string(ok: @success) do %>
<% end %>
Entweder / Oder Klassen
Übergeben Sie für Anwendungsfälle, in denen ein Ternär erforderlich wäre (z. B. @success ? 'good' : 'bad'
), ein Array, in dem das erste Element die Klasse für true
und das andere für istfalse
<div class="<%= [:good, :bad] => @success %>">
Inspiriert von React
Diese Technik ist inspiriert von einem Add-On namens classNames
(früher bekannt als classSet
) aus dem React
Front-End-Framework von Facebook .
Verwendung in Ihren Rails-Projekten
Derzeit ist die class_names
Funktion in Rails nicht vorhanden. In diesem Artikel erfahren Sie jedoch, wie Sie sie in Ihre Projekte einfügen oder in diese implementieren können.