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

#ruby-on-rails #ruby #haml

#ruby-on-rails #ruby #haml

Вопрос:

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

Пример: <div itemscope>

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

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

Мой код:

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

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

Возможно, это нормально, но я бы предпочел, чтобы он был пустым, как задокументировано в документе Schema.

Комментарии:

1. Не могли бы вы вставить свой Haml-код, пожалуйста?

2. Вы пробовали использовать пустую строку? %span{ :itemscope => '' }

3. Мой код: .agency.premium{:itemscope => true, :itemtype => ‘ schema.org/ProfessionalService ‘}. :itemscope => true, похоже, является рекомендуемым подходом из документации HAML . Я получаю тот же результат, что и при использовании:itemscope => «, допустимого атрибута XHTML с пустым значением (т.е. <div itemscope=»»>). Наверное, хорошо, но я бы предпочел, чтобы он был пустым, как задокументировано в Schem adoc.

4. В своем сообщении дополните разметку символами ` (backtick), чтобы она была видна.

Ответ №1:

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

 %div{:itemscope => true}
  

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

То, как это отображается, зависит от того, как вы установили format параметр Haml. Значение по умолчанию в 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)