如何使用条件来决定是否输出HAML周围的标签?我正在尝试创建下面的代码的DRY版本。如何有条件地将一些HAML内容包装到标签中?
- if i_should_link
%a{:href => url}
.foo
.block
.of
.code
- else
.foo
.block
.of
.code
如何使用条件来决定是否输出HAML周围的标签?我正在尝试创建下面的代码的DRY版本。如何有条件地将一些HAML内容包装到标签中?
- if i_should_link
%a{:href => url}
.foo
.block
.of
.code
- else
.foo
.block
.of
.code
您可以使用部分。
foo.html.haml
- if i_should_link
%a{:href => url}
= render 'bar'
- else
= render 'bar'
_bar.html.haml
.foo
.block
.of
.code
编辑:或者你可以使用内容,我想这是因为它可以更好将它全部保存在同一个文件中。
- if i_should_link
%a{:href => url}
= yield :foobar
- else
= yield :foobar
- content_for :foobar do
.foo
.block
.of
.code
我认为奥丁的建议使用部分可能是在大多数情况下最好的。
然而,作为替代的解决方案,我发现a thread其中森魏泽鲍姆建议定义该方法:
def haml_tag_if(condition, *args, &block)
if condition
haml_tag *args, &block
else
yield
end
end
无论是在该块将总是被渲染,但包裹标签将基于出现或不在条件。
如下你会使用它:
- haml_tag_if(planning_to_mail?, :div, :id => 'envelope') do
%p I'm a letter
如果planning_to_mail?
评估true
,你会得到:
<div id="envelope">
<p>I'm a letter</p>
</div>
如果评估false
,你会得到:
<p>I'm a letter</p>
他飘来加入这的想法,但那doesn't appear to have happened yet。
我不太确定这是如何与HTML相关的,如果它是HAML ... – element119
这是一个重复的:http://stackoverflow.com/questions/8636401/haml-create-container-element-only- if-condition-is-true –