HAML:仅当condition为true时才创建容器/包装元素

Longshot,但我想知道是否有办法做这样的事情:

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

换句话说,它总是显示内部的内容,但如果(某些条件)为真,它只会在它周围包装一个容器。

你可以使用原始的html,但是你必须在开头和结尾都有if语句:

 - if show_paras 

= name - if show_paras

假设你做的不仅仅是= name ,你可以使用partial:

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

你也可以使用HAML的surround (虽然这有点乱):

 - surround(show_paras ? "

" : "", show_paras ? "

" : "") do = name

最后,我可能会做的不是尝试省略p标签,只是使用CSS类来设置两种不同的p样式来查看我想要的方式:

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

另一个选择是使用haml_tag在不满足条件的情况下将其包装在备用标记中:

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

我能想到的最干净的方式是这样的:

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

但它并不完全是haml。

通常标记是内容的,所以如果show_paras是更具表现性的调整,你应该使用css来改变%p的行为