Slim-lang if-else вложенный код - программирование
Подтвердить что ты не робот

Slim-lang if-else вложенный код

Я хочу присвоить класс css части HTML на основе условия в slim-lang

Я делаю следующее

- if current_user
  .title
- else
  .title_else

Теперь, как я могу написать HTML, который должен быть вложен в один из классов выше? Нужно ли писать HTML в обоих условиях if и else условие?

Причина в том, что HTML, который должен быть вложен в один из вышеперечисленных классов, должен быть далее предписан в порядке. Но если я намереваюсь это сделать правильно, он включается в другое условие. Как я сейчас подхожу к этому?

4b9b3361

Ответ 1

Здесь один лайнер:

.thing class=(current_user ? 'large-menu' : 'medium-menu')
  h4 Same content, different class

Ответ 2

Поскольку вы просто переключаетесь между двумя атрибутами, ответ Tiago Franco, безусловно, достаточен для ваших целей. Однако есть и другой способ, который вам пригодится.

Вы можете использовать capture для рендеринга HTML для локальной переменной, а затем встраивать этот контент в любую структуру управления, которая вам нравится. Итак, если ваш контент для переноса был немного сложнее, вы бы сделали следующее:

- shared_content = capture do
  div This is displayed regardless of the wrapper
- if current_user
  | You're logged in!
  .title
    = shared_content
- else
  | You're not logged in!
  .title_else
    = shared_content

Я часто использую это, чтобы обернуть контент в ссылку, если есть доступный URL:

- image = capture do
  img src=image_url
- if url.blank?
  = image
- else
  a href=url = image  

Ответ 3

1) Да, вам нужно написать HTML в оба созданных div, так как вы хотите, чтобы он был другим. Если вы не хотите, чтобы он был другим, не было бы необходимости в выражении if!

2) Я не совсем понял вашу точку зрения, но этот код отлично работал со мной:

- if true
  .title
    h4 True is true!
- else
  .title_else
    h4 True is not true!

Этот код показал div с классом .title и a h4 с текстом True is true! внутри него.

EDIT: Хорошо, теперь я понимаю, что вы имеете в виду! Невозможно сделать что-то подобное, потому что это не сделает h4!

- if true
  .title
- else
  .title_else

    h4 Same content, different class

Я бы порекомендовал вам написать помощник, который позволяет выставлять частичные части, а затем просто визуализировать их частично из обоих условий. Это означает, что вам нужно только написать эту часть и вызвать ее дважды.

- if true
  .title
    = render 'footer'
- else
  .title_else
    = render 'footer'