คลาสเงื่อนไขแบบไดนามิกบาง [ปิด]


101

เพียงเพื่อช่วยนักพัฒนาคนอื่น ๆ เพราะไม่มีคำถามที่คล้ายกันใน SO

div class=(is_active? ? 'active' : 'inactive')
div class=('active' if is_active?)

คำตอบ:


145

ดูตัวอย่างด้านล่าง:

div class=(is_active? ? 'active' : 'inactive')
div class=('active' if is_active?)

สามารถใช้แนวทางเดียวกันเพื่อกำหนดค่าไดนามิกให้กับแอตทริบิวต์อื่น ๆ


2
คุณจะทำอย่างไรกับหลาย ๆ เงื่อนไข?
Maxim Zubarev

ดูด้านล่างในความคิดเห็นสำหรับคำตอบของคุณ
Sergey Alekseev

3
นอกจากนี้ยังสามารถต่อท้ายชั้นเรียนได้เช่น: div.councilor class=(councilor.retired? ? "retired" : "") สร้าง:div.councilor.retired
Terra Ashley

20

ฉันใช้อาร์เรย์ของคลาสและองค์ประกอบศูนย์หากไม่จำเป็นต้องรวมคลาสไว้ในรายการจากนั้นอาร์เรย์ขนาดกะทัดรัดเพื่อลบองค์ประกอบศูนย์และสุดท้ายรวมทั้งหมดเข้าด้วยกัน

div class=(["cday", "col-md-1", day.day == 1 ? "col-md-offset-#{day.cwday-1}" : nil].compact.join(' '))

12

หากคุณมีเงื่อนไขหลายอย่างที่ฉันกำลังทำอยู่ตอนนี้เช่น

div class=(('foo ' if is_foo?) + ('bar' if is_bar?))

แม้ว่าฉันจะรู้สึกว่ามันเป็นจุดบกพร่องถ้า is_bar? ส่งคืนเท็จและผลลัพธ์ HTML ที่สร้างขึ้นใน

<div class="foo "></div>

(จุดตำหนิคืออักขระว่างหลังfoo) หากมีใครมีวิธีแก้ปัญหานี้จะดีมาก


7
ลองString#rstripในกรณีนี้โดยมี 2 เงื่อนไข: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). หรือdiv class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))หลายเงื่อนไข
Sergey Alekseev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.