Html 如何在标记中有条件地包装一些HAML内容?
如何使用条件来决定是否在HAML中输出周围的标记?我正在尝试创建下面代码的干式版本Html 如何在标记中有条件地包装一些HAML内容?,html,haml,Html,Haml,如何使用条件来决定是否在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}
- 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'
.foo
.block
.of
.code
\u bar.html.haml
- if i_should_link
%a{:href => url}
= render 'bar'
- else
= render 'bar'
.foo
.block
.of
.code
编辑:或者您可以使用内容,我想这样更好,因为它将所有内容保存在同一个文件中
- if i_should_link
%a{:href => url}
= yield :foobar
- else
= yield :foobar
- content_for :foobar do
.foo
.block
.of
.code
我认为奥丁的建议是在大多数情况下,使用分部可能是最好的 然而,作为替代解决方案,我发现Nathan Weizenbaum建议定义此方法的地方:
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\u to\u mail?
评估true
,您将得到:
<div id="envelope">
<p>I'm a letter</p>
</div>
<p>I'm a letter</p>
他提出了将此添加到
Haml::Helpers
的想法,但是。如果是Haml,我不确定这与HTML有什么关系……这是重复的:方法的内容非常好。谢谢,奥丁。我会看看是否有其他的解决方案,让你知道……但他从不让我知道:-(提醒你仍然没有答案。你能睡吗:D?在我的情况下,我必须首先为block提供内容。在文件末尾定义它是行不通的。你知道为什么吗?这最近被添加到Haml中,但还没有发布。在Haml 4.1或Haml 5中注意一下:这是一个很棒的答案——六年过去了,现在仍然是fering是一个很好的解决方案。不管它值多少钱,我已经在助手中用content_标记替换了haml_标记,它的工作原理与上面概述的一样。上面评论中提到的haml_tag_if helper
方法应该是可以接受的答案,非常感谢!