Unikanie logiki w widokach
Problem z podejściem standardowym polega na tym, że wymaga ono logiki w postaci if
instrukcji lub trójek w widoku. Jeśli masz wiele warunkowych klas CSS zmieszanych z klasami domyślnymi, musisz umieścić tę logikę w interpolacji ciągów lub tagu ERB.
Oto zaktualizowane podejście, które pozwala uniknąć wprowadzania logiki do widoków:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string
metoda
class_string
Pomocnik bierze hash z par klucz / wartość złożonych z klasy CSS ciągów nazwy i wartości logicznych . Wynikiem metody jest ciąg klas, w których wartość logiczna jest oceniana jako true.
Przykładowe użycie
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
Inne przypadki użycia
Ten helper może być używany w ERB
tagach lub z pomocnikami Rails, takimi jak 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 %>
Klasy albo / albo
W przypadkach użycia, w których konieczna byłaby trójskładnik (np. @success ? 'good' : 'bad'
), Przekaż tablicę, w której pierwszy element jest klasą dla, true
a drugi dlafalse
<div class="<%= [:good, :bad] => @success %>">
Zainspirowany React
Technika ta jest inspirowana dodatkiem o nazwie classNames
(wcześniej znanym jako classSet
) z React
front-endowego frameworka Facebooka .
Używanie w projektach Railsowych
Obecnie class_names
funkcja nie istnieje w Railsach, ale ten artykuł pokazuje, jak dodać lub zaimplementować ją w swoich projektach.