Ответ 1
Здесь один лайнер:
.thing class=(current_user ? 'large-menu' : 'medium-menu')
h4 Same content, different class
Я хочу присвоить класс css части HTML на основе условия в slim-lang
Я делаю следующее
- if current_user
.title
- else
.title_else
Теперь, как я могу написать HTML, который должен быть вложен в один из классов выше? Нужно ли писать HTML в обоих условиях if
и else
условие?
Причина в том, что HTML, который должен быть вложен в один из вышеперечисленных классов, должен быть далее предписан в порядке. Но если я намереваюсь это сделать правильно, он включается в другое условие. Как я сейчас подхожу к этому?
Здесь один лайнер:
.thing class=(current_user ? 'large-menu' : 'medium-menu')
h4 Same content, different class
Поскольку вы просто переключаетесь между двумя атрибутами, ответ 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
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'