Удалить атрибут HTML-тега в slim, если атрибут не должен отображаться
Я хотел бы удалить атрибут класса, если класс не должен отображаться в Slim.
В ERB я мог бы использовать:
<input <%= "class='foo'" if false %> />
<input />
Как это сделать в Slim?
Я нашел это, но я чувствую, что должно быть более идиоматическое решение:
| <input "#{'class=\"foo\"' if false}" />
Ответы
Ответ 1
Если значение атрибута nil
, то весь атрибут будет опущен (на самом деле это происходит для nil
или false
для большинства случаев, но похоже, что атрибут class
ведет себя по-разному для false
и true
):
input class=('foo' if condition)
Это приведет к выводу
<input class="foo" />
если condition
- true
, а
<input />
если condition
является ложным.
Ответ 2
Вы можете использовать оператор splat (*), чтобы помочь определить условные атрибуты для тегов в slim, используя хеши, содержащие добавляемые атрибуты.
http://www.rubydoc.info/gems/slim/frames#Splat_attributes__
Оператор splat расширяет хэш в набор атрибутов, добавляемых в тег. Если хэш пуст, атрибуты не будут добавлены.
Например,
- admin_classes = @User.admin? ? {class: "foo"} : {}
input *admin_classes
если @User.admin? == true, он должен отображать
<input class="foo">
else, если @User.admin? == false, он должен отображать
<input>
Для таких атрибутов, как "класс" или другие атрибуты, включающие слияние атрибутов, вы также можете сделать что-то вроде этого:
- admin_classes = @User.admin? ? {class: ["foo","bar"]} : {}
input *admin_classes class="biz"
если @User.admin? == true, он должен отображать
<input class="foo bar biz">
else, если @User.admin? == false, он должен отображать
<input class="biz">