#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)