【问题标题】:HAML: Create container/wrapper element only if condition is trueHAML:仅在条件为真时创建容器/包装器元素
【发布时间】:2011-12-26 13:57:49
【问题描述】:

Longshot,但我想知道是否有任何方法可以做这样的事情:

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

换句话说,它总是显示里面的内容,但是如果(某些条件)为真,它只会在内容周围包裹一个容器。

【问题讨论】:

标签: ruby-on-rails haml


【解决方案1】:

你可以使用原始 html,但你必须在开头和结尾都有 if 语句:

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

假设您所做的不仅仅是= name,您可以使用部分:

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

您也可以使用 HAML 的 surround(虽然这有点乱):

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

最后,我可能会做的不是尝试省略 p 标签,而是使用 CSS 类设置两种不同的 p 样式以看起来我想要的方式:

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

【讨论】:

  • 谢谢,环绕是我一直在寻找的东西。正如你所说,有点乱,但你可以通过在环绕上构建的辅助函数让它变得非常干净。谢谢!
【解决方案2】:

如果条件不满足,另一种选择是使用haml_tag

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

【讨论】:

【解决方案3】:

我能想到的最干净的方法是这样的:

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

但这并不完全是haml。

通常标记是内容的,所以如果 show_paras 是一个更具表现力的调整,你可能应该使用 css 来改变 %p 的行为

【讨论】:

  • 是的,我明白你的意思,但在我的情况下,它涉及更多一点,因为里面有条件内容,在某些情况下可以说它是一个段落(或部分等),但在其他情况下,只是一个简单的 div/span。
【解决方案4】:

【讨论】:

  • 旧的haml_tag_if!不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 2021-11-18
相关资源
最近更新 更多