Html 如何在标记中有条件地包装一些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}

如何使用条件来决定是否在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'
.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
方法应该是可以接受的答案,非常感谢!