Подтвердить что ты не робот

Удалить атрибут HTML-тега в slim, если атрибут не должен отображаться

Я хотел бы удалить атрибут класса, если класс не должен отображаться в Slim.

В ERB я мог бы использовать:

<input <%= "class='foo'" if false %> />
<input />

Как это сделать в Slim?

Я нашел это, но я чувствую, что должно быть более идиоматическое решение:

| <input "#{'class=\"foo\"' if false}" />
4b9b3361

Ответ 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">