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

橙三吉。 提交于 2019-11-29 18:58:01

问题


Longshot, but I'm wondering if there's any way to do something like this:

%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE
  = name

In other words, it always shows the content inside, but it only wraps a container around it if (some-condition) is true.


回答1:


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



回答2:


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



回答3:


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




回答4:


- haml_tag_if show_paras, :p do
  = name

https://github.com/haml/haml/commit/66a8ee080a9fb82907618227e88ce5c2c969e9d1



来源:https://stackoverflow.com/questions/8636401/haml-create-container-wrapper-element-only-if-condition-is-true

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