Saya kadang-kadang harus menambahkan kelas ke elemen html berdasarkan suatu kondisi. Masalahnya adalah saya tidak dapat menemukan cara yang tepat untuk melakukannya. Inilah contoh dari hal-hal yang telah saya coba:
<div <%= if @status = 'success'; "class='ok'"; end %>>
some message here
</div>
ATAU
<% if @status == 'success' %>
<div class='success'>
<% else %>
<div>
<% end %>
some message here
</div>
Saya tidak suka pendekatan pertama karena tampilannya penuh sesak dan sulit dibaca. Saya tidak suka pendekatan kedua karena sarangnya kacau. Akan menyenangkan untuk memasukkannya ke dalam model, (sesuatu seperti @status.css_class
), tapi itu bukan miliknya. Apa yang dilakukan kebanyakan orang?
sumber
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:
class_string
metodeThe
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
Kasus Penggunaan Lainnya
Helper ini dapat digunakan di dalam
ERB
tag atau dengan pembantu Rails sepertilink_to
.Salah Satu / Atau Kelas
Untuk kasus penggunaan di mana terner akan diperlukan (misalnya
@success ? 'good' : 'bad'
), berikan larik di mana elemen pertama adalah kelasnyatrue
dan yang lainnya untukfalse
Terinspirasi oleh React
Teknik ini terinspirasi oleh add-on yang disebut
classNames
(sebelumnya dikenal sebagaiclassSet
) dariReact
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.sumber
Anda juga bisa menggunakan helper content_for, terutama jika DOM terletak di layout dan Anda ingin menyetel kelas css bergantung pada pemuatan parsial.
Pada tata letak:
Secara parsial:
Hanya itu saja.
sumber