ผนวกคลาสถ้าเงื่อนไขเป็นจริงใน Haml


155

ถ้า post.published?

.post
  / Post stuff

มิฉะนั้น

.post.gray
  / Post stuff

ฉันใช้สิ่งนี้กับผู้ช่วยรางและดูเหมือนว่าน่าเกลียด

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

ตัวแปรที่สอง:

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

มีวิธีที่ง่ายขึ้นและเฉพาะเจาะจงมากขึ้น haml?

UPD เฉพาะ Haml แต่ก็ไม่ง่าย:

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

คำตอบ:


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

73
เพียงหมายเหตุด้านข้างสำหรับหลายเงื่อนไข `{class: [('class1' ยกเว้น condition1), ('class2' if condition2)]}` .. ฯลฯ
Mohammad AbuShady

5
รวบรัดมากขึ้นสำหรับเงื่อนไขหลายประการ:{ class:[ (:class1 if cond1), (:class2 if cond2) ] }
Phrogz

1
หมายเหตุ: จำเป็นต้องใส่วงเล็บหรือคุณจะได้รับข้อผิดพลาดทางไวยากรณ์ของทับทิม
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
ไม่กระชับ แต่ดูดีกว่าวิธีอื่น ๆ หากใส่ไว้ในผู้ช่วย
Simon Perepelitsa

3
นี้ทำงานได้ดี - ผมสังเกตเห็นว่าคุณไม่จำเป็นต้อง.compact.join(" ")แม้ว่า คุณสามารถทำได้:class => ["post active", ("gray" unless post.published?)]
Stenerson

15

จริงๆสิ่งที่ดีที่สุดคือการใส่ลงในผู้ช่วย

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

#some_helper.rb

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

ฉันใส่สิ่งนี้ลงในไฟล์ตัวช่วย แต่แอพของฉันบอกฉันว่าไม่มีตัวแปร "โพสต์"
Simon Perepelitsa

2
fyi: หากคุณต้องการรวมคลาสไว้ในบางกรณีและไม่มีสิ่งใดในกรณีอื่นคุณสามารถตั้งค่าได้nilและจะไม่ตั้งค่าแอตทริบิวต์แทนการตั้งค่าclass=""
MMachinegun

14

HAML มีวิธีที่ดีในการจัดการสิ่งนี้:

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

วิธีการใช้งานคือเงื่อนไขได้รับการประเมินและถ้าเป็นจริงสตริงจะถูกรวมในคลาสหากไม่ได้จะไม่ถูกรวม


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.