Longshot,但我想知道是否有办法做这样的事情:
%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE
= name
换句话说,它总是显示内部的内容,但如果(某些条件)为真,它只会在它周围包装一个容器。
答案 0 :(得分:15)
你可以使用原始html,但是你必须在开头和结尾都有if语句:
- if show_paras
<p>
= name
- if show_paras
</p>
假设你做的不仅仅是= name
,你可以使用部分:
- if show_paras
%p= render "my_partial"
- else
= render "my_partial"
你也可以使用HAML的surround
(虽然这有点乱):
- surround(show_paras ? "<p>" : "", show_paras ? "</p>" : "") do
= name
最后,我可能会做的就是不要尝试省略p
标签,只需使用CSS类来设置两种不同的p
样式,以便按照我想要的方式进行:
%p{:class => show_paras ? "with_paras" : "without_paras"}
= name
答案 1 :(得分:4)
另一种选择是,如果不满足条件,则使用haml_tag
将其包装在替代标记中:
- haml_tag(show_paras ? :p : :div) do
= name
答案 2 :(得分:2)
我能想到的最干净的方式就是这样:
= show_paras ? content_tag(:p, name) : name
但它并不完全是haml。
通常标记是内容的,所以如果show_paras是更具表现性的调整,你应该使用css来改变%p的行为
答案 3 :(得分:1)
- haml_tag_if show_paras, :p do
= name
https://github.com/haml/haml/commit/66a8ee080a9fb82907618227e88ce5c2c969e9d1