2011-12-26 20 views
10

Longshot, nhưng tôi đang tự hỏi nếu có cách nào để làm điều gì đó như thế này:HAML: Tạo yếu tố container/wrapper chỉ nếu điều kiện là đúng

%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE 
    = name 

Nói cách khác, nó luôn luôn hiển thị nội dung bên trong, nhưng nó chỉ bao bọc một thùng chứa xung quanh nó nếu (một số điều kiện) là đúng.

+0

Đây là một bản sao của: http://stackoverflow.com/questions/72373 08/how-can-i-conditionally-wrap-some-haml-content-in-a-tag –

Trả lời

15

Bạn có thể sử dụng html thô, nhưng sau đó bạn sẽ phải có câu lệnh if cả lúc bắt đầu và kết thúc:

- if show_paras 
    <p> 
= name 
- if show_paras 
    </p> 

Giả sử bạn đang làm nhiều hơn chỉ = name, bạn có thể sử dụng một phần :

- if show_paras 
    %p= render "my_partial" 
- else 
    = render "my_partial" 

Bạn cũng có thể sử dụng HAML của surround (mặc dù điều này là một chút lộn xộn):

- surround(show_paras ? "<p>" : "", show_paras ? "</p>" : "") do 
    = name 

Cuối cùng, những gì tôi có thể sẽ làm là không cố gắng để bỏ qua các thẻ p ở tất cả, và chỉ sử dụng các lớp học CSS để thiết lập hai p phong cách khác nhau để tìm cách tôi muốn:

%p{:class => show_paras ? "with_paras" : "without_paras"} 
    = name 
+0

Cảm ơn, surround là loại điều tôi đang tìm kiếm. Ít lộn xộn như bạn nói, nhưng bạn có thể làm cho nó rất sạch sẽ với một xây dựng chức năng trợ giúp trên bao quanh. Cảm ơn! – mahemoff

2

Cách sạch tôi có thể nghĩ đến việc làm như sau:

= show_paras ? content_tag(:p, name) : name 

Nhưng nó không chính xác là haml.

Nói chung đánh dấu là về nội dung, vì vậy nếu show_paras là một tinh chỉnh presentational hơn có lẽ bạn nên sử dụng css để thay đổi hành vi của% p thay

+0

Đúng, tôi lấy ý kiến ​​của bạn, nhưng trong trường hợp của tôi, nó có liên quan nhiều hơn vì có nội dung có điều kiện bên trong sẽ khiến cho nó được cho là một đoạn (hoặc phần v.v.) trong một số trường hợp, nhưng trong các trường hợp khác, chỉ là một div/span đơn giản . – mahemoff

4

Một lựa chọn khác là để bọc nó trong một thẻ thay thế nếu tình trạng này không được đáp ứng, sử dụng haml_tag:

- haml_tag(show_paras ? :p : :div) do 
    = name 
+1

[Tài liệu hướng dẫn] (http://haml.info/docs/yardoc/Haml/Helpers.html#haml_tag-instance_method) – Carpetsmoker

Các vấn đề liên quan