HAML: создайте элемент контейнера / оболочки только в том случае, если условие истинно - PullRequest
10 голосов
/ 26 декабря 2011

Longshot, но мне интересно, есть ли способ сделать что-то вроде этого:

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

Другими словами, он всегда показывает содержимое внутри, но только оборачивает контейнер вокруг него, если (some-условие) верно.

Ответы [ 4 ]

15 голосов
/ 26 декабря 2011

Вы можете использовать необработанный 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
4 голосов
/ 30 июня 2015

Другой вариант - заключить его в альтернативный тег, если условие не выполнено, используя haml_tag:

- haml_tag(show_paras ? :p : :div) do
  = name
2 голосов
/ 26 декабря 2011

Самый чистый способ, которым я могу мыслить, выглядит так:

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

Но это не совсем хамл.

Обычно разметка предназначена для содержимого, поэтому, если show_paras - более наглядная настройка, вам, вероятно, следует использовать css, чтобы изменить поведение% p вместо

1 голос
/ 28 ноября 2016
...