Menghindari logika dalam pandangan
Masalah dengan pendekatan standar adalah membutuhkan logika dalam bentuk if
pernyataan atau terner dalam tampilan. Jika Anda memiliki beberapa kelas CSS bersyarat yang dicampur dengan kelas default, maka Anda perlu memasukkan logika itu ke dalam interpolasi string atau tag ERB.
Berikut adalah pendekatan terbaru yang menghindari memasukkan logika apa pun ke dalam tampilan:
<div class="<%= class_string(ok: @success) %>">
some message here
</div>
class_string
metode
The class_string
helper mengambil hash dengan pasangan kunci / nilai yang terdiri dari string nama kelas CSS dan nilai-nilai boolean . Hasil dari metode ini adalah string kelas di mana nilai boolean dievaluasi menjadi benar.
Penggunaan Sampel
class_names(foo: true, bar: false, baz: some_truthy_variable)
# => "foo baz"
Kasus Penggunaan Lainnya
Helper ini dapat digunakan di dalam ERB
tag atau dengan pembantu Rails seperti 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 %>
Salah Satu / Atau Kelas
Untuk kasus penggunaan di mana terner akan diperlukan (misalnya @success ? 'good' : 'bad'
), berikan larik di mana elemen pertama adalah kelasnya true
dan yang lainnya untukfalse
<div class="<%= [:good, :bad] => @success %>">
Terinspirasi oleh React
Teknik ini terinspirasi oleh add-on yang disebut classNames
(sebelumnya dikenal sebagai classSet
) dari React
kerangka front-end Facebook .
Menggunakan dalam proyek Rails Anda
Sampai sekarang, class_names
fungsinya tidak ada di Rails, tetapi artikel ini menunjukkan cara menambahkan atau mengimplementasikannya ke dalam proyek Anda.