Пустой атрибут с 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.
Ответы
Ответ 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)