lớp có điều kiện động mỏng [đã đóng]


100

Chỉ để giúp các nhà phát triển khác, vì không có câu hỏi tương tự trên SO.

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

Câu trả lời:


142

Xem các ví dụ dưới đây:

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

Cách tiếp cận tương tự có thể được sử dụng để gán giá trị động cho các thuộc tính khác.


2
Làm thế nào bạn sẽ làm điều đó cho nhiều điều kiện?
Maxim Zubarev

Xem bên dưới trong phần bình luận cho câu trả lời của bạn.
Sergey Alekseev

3
Điều này cũng có thể thêm một lớp học, chẳng hạn như: div.councilor class=(councilor.retired? ? "retired" : "") tạo ra:div.councilor.retired
Terra Ashley

20

Tôi sử dụng mảng các lớp và phần tử nil nếu không cần đưa lớp vào danh sách, sau đó mảng compact để loại bỏ các phần tử nil và cuối cùng nối tất cả lại với nhau.

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

12

Nếu bạn có nhiều điều kiện, tôi đang làm ngay bây giờ một cái gì đó như

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

Mặc dù tôi cảm thấy đó là một nhược điểm nếu is_bar? trả về false và kết quả HTML được tạo là

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

(nhược điểm là ký tự trống sau dấu foo). Nếu ai đó có giải pháp cho điều đó thì thật tuyệt vời.


7
Hãy thử String#rstriptrong trường hợp này với 2 điều kiện: div class=((('foo ' if is_foo?) + ('bar' if is_bar?)).rstrip). Hoặc div class=([('foo' if is_foo?), ('bar' if is_bar?)].compact.join(' '))đối với một số điều kiện.
Sergey Alekseev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.