Haml'de koşul doğruysa sınıfa ekleyin


155

Eğer post.published?

.post
  / Post stuff

Aksi takdirde

.post.gray
  / Post stuff

Bunu ray yardımcısı ile uyguladım ve çirkin görünüyor.

= content_tag :div, :class => "post" + (" gray" unless post.published?).to_s do
  / Post stuff

İkinci varyant:

= content_tag :div, :class => "post" + (post.published? ? "" : " gray") do
  / Post stuff

Daha basit ve hamleye özgü bir yol var mı?

UPD. Haml'e özgü, ancak yine de basit değil:

%div{:class => "post" + (" gray" unless post.published?).to_s}
  / Post stuff

Yanıtlar:


331
.post{:class => ("gray" unless post.published?)}

73
çoklu koşullar için sadece bir yan not `{class: [('class1' koşul1 değilse), ('koşul2 ise' class2 ')]}` `vb.
Mohammad AbuShady

5
Birden fazla koşul için daha özlü:{ class:[ (:class1 if cond1), (:class2 if cond2) ] }
Phrogz

1
Not: parantez gereklidir veya yakut sözdizimi hatası alırsınız.
Topher Fangio

21
- classes = ["post", ("gray" unless post.published?)]
= content_tag :div, class: classes do
  /Post stuff

def post_tag post, &block
  classes = ["post", ("gray" unless post.published?)]
  content_tag :div, class: classes, &block
end

= post_tag post
  /Post stuff

1
Çok özlü değil, ama bir yardımcıya konulursa diğer yollardan daha iyi görünüyor.
Simon Perepelitsa

3
Bu iyi çalışıyor - .compact.join(" ")Gerçi ihtiyacın olmadığını fark ettim . Basitçe yapabilirsiniz:class => ["post active", ("gray" unless post.published?)]
Stenerson

15

Gerçekten en iyi şey onu bir yardımcıya koymak.

%div{ :class => published_class(post) }

#some_helper.rb

def published_class(post)
  "post #{post.published? ? '' : 'gray'}"
end

Bunu yardımcı dosyama koydum, ancak uygulamam "yazı" değişkeni olmadığını söylüyor.
Simon Perepelitsa

2
fyi: sadece belirli bir duruma bir sınıf eklemek istiyorsanız ve diğer durumlarda hiçbir şey nilayarlayamazsanız, ayar yerine bu özellik ayarlanamazclass=""
MMachinegun

14

HAML bununla başa çıkmak için güzel bir şekilde inşa edilmiştir:

.post{class: [!post.published? && "gray"] }

Bunun çalışma şekli, koşulun değerlendirilmesidir ve eğer doğruysa, dize sınıflara dahil edilir, değilse de dahil edilmez.


5

Güncellenmiş Ruby sözdizimi:

.post{class: ("gray" unless post.published?)}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.