HAML: Create container/wrapper element only if condition is true

随声附和 提交于 2019-11-30 12:41:34

You could use raw html, but then you'd have to have the if statement both at the beginning and end:

- if show_paras
  <p>
= name
- if show_paras
  </p>

Assuming you're doing more than just = name, you could use a partial:

- if show_paras
  %p= render "my_partial"
- else
  = render "my_partial"

You could also use HAML's surround (though this is a little messy):

- surround(show_paras ? "<p>" : "", show_paras ? "</p>" : "") do
  = name

Finally, what I would probably do is not try to omit the p tag at all, and just use CSS classes to set up two different p styles to look the way I want:

%p{:class => show_paras ? "with_paras" : "without_paras"}
  = name

Another option is to wrap it in an alternative tag if the condition isn't met, using haml_tag:

- haml_tag(show_paras ? :p : :div) do
  = name

The cleanest way I can think of doing is like this:

= show_paras ? content_tag(:p, name) : name

But it's not exactly haml.

Generally markup is the for the content, so if show_paras is a more presentational tweak you should probably be using css to change the behaviour of the %p instead

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!