Пустой атрибут с Ruby HAML - программирование
Подтвердить что ты не робот

Пустой атрибут с Ruby HAML

Я внедряю микроформаты схемы в проекте Ruby с использованием HAML и не могу понять, как установить пустой атрибут в теге. Я попробовал nil и false, но они просто не показываются.

Пример: <div itemscope>

Я пытаюсь установить пустой атрибут itemscope.

Код, добавленный из комментария @StrangeElement:

Мой код:

.agency.premium{:itemscope => true, :itemtype => 'schema.org/ProfessionalService';} 

:itemscope => true представляется рекомендуемым подходом из документации HAML. Я получаю тот же результат, что и с :itemscope => '', атрибутом XHTML-valid с пустым значением (т.е. <div itemscope="">).

Наверное, отлично, но я предпочел бы, чтобы он был пустым, как описано в документе Schema.

4b9b3361

Ответ 1

Используя что-то вроде

%div{:itemscope => true}

- это правильный способ указать это в вашем файле Haml.

Как это получается, зависит от того, как вы устанавливаете параметр Haml format. По умолчанию в Haml 3.1 есть xhtml, и с этим он будет отображаться как itemprop='itemprop', который является действительным xhtml. Для рендеринга с минимальными атрибутами (например, <div itemscope>) вам необходимо установить формат html4 или html5. (В Rails 3 по умолчанию используется html5, а в Haml 4.0 значение по умолчанию - html5).

Как установить параметры Haml, зависит от того, как вы его используете, см. раздел параметров в документах.

Например, используя Haml непосредственно в Ruby, это:

engine = Haml::Engine.new '%div{:itemscope => true}'
puts engine.render

создает xhtml по умолчанию с полными атрибутами:

<div itemscope='itemscope'></div>

Но это:

engine = Haml::Engine.new '%div{:itemscope => true}', :format => :html5
puts engine.render

создает желаемый результат с минимизированными атрибутами:

<div itemscope></div>

Ответ 2

Если кто-то заинтересован в том, как добавить больше слов таким образом, он может использовать "foo bar" => true:

%option{ "disabled selected value" => true } Choose an option

результат:

<option disabled="" selected="" value="">Choose an option</option>

и работает как ожидалось.

Ответ 3

Принятый ответ работает, но он создает атрибут HTML со значением.

Если вы хотите, чтобы атрибут выводился только в HTML, без значения, вы можете использовать синтаксис атрибутов HTML-стиля HAML:

%div(itemscope)