Görünümlerde mantıktan kaçınmak
Standart yaklaşımla ilgili sorun, şu şekilde mantık gerektirmesidir: if
, görünümde ifadeler veya üçlüler . Varsayılan sınıflarla karıştırılmış birden çok koşullu CSS sınıfınız varsa, bu mantığı bir dize enterpolasyonuna veya ERB etiketine koymanız gerekir.
Görünümlere herhangi bir mantık koymaktan kaçınan güncellenmiş bir yaklaşım:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string
yöntem
class_string
Yardımcı oluşan anahtar / değer çiftleri ile bir karma alır CSS sınıf adı dizeleri ve boole değerlerini . Yöntemin sonucu, boole değerinin true olarak değerlendirildiği bir sınıf dizisidir.
Örnek Kullanım
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
Diğer Kullanım Durumları
Bu yardımcı, ERB
etiketler içinde veya gibi Rails yardımcıları ile kullanılabilir 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 %>
Ya / Veya Sınıflar
Üçlü bir değerin gerekli olduğu kullanım durumları için (ör. @success ? 'good' : 'bad'
), İlk öğenin sınıf için true
ve diğer öğenin için olduğu bir dizi iletinfalse
<div class="<%= [:good, :bad] => @success %>">
React'ten ilham aldı
Bu teknik, Facebook'un ön uç çerçevesinden adı verilen classNames
(eski adıyla classSet
) bir eklentiden esinlenmiştir React
.
Rails projelerinizde kullanmak
Şu an itibariyle, class_names
işlev Rails'de mevcut değil, ancak bu makale onu projelerinize nasıl ekleyeceğinizi veya uygulayacağınızı gösteriyor.