【发布时间】:2011-12-26 13:57:49
【问题描述】:
Longshot,但我想知道是否有任何方法可以做这样的事情:
%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE
= name
换句话说,它总是显示里面的内容,但是如果(某些条件)为真,它只会在内容周围包裹一个容器。
【问题讨论】:
标签: ruby-on-rails haml
Longshot,但我想知道是否有任何方法可以做这样的事情:
%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE
= name
换句话说,它总是显示里面的内容,但是如果(某些条件)为真,它只会在内容周围包裹一个容器。
【问题讨论】:
标签: ruby-on-rails haml
你可以使用原始 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
【讨论】:
如果条件不满足,另一种选择是使用haml_tag:
- haml_tag(show_paras ? :p : :div) do
= name
【讨论】:
我能想到的最干净的方法是这样的:
= show_paras ? content_tag(:p, name) : name
但这并不完全是haml。
通常标记是内容的,所以如果 show_paras 是一个更具表现力的调整,你可能应该使用 css 来改变 %p 的行为
【讨论】:
- haml_tag_if show_paras, :p do
= name
https://github.com/haml/haml/commit/66a8ee080a9fb82907618227e88ce5c2c969e9d1
【讨论】: