web-dev-qa-db-fra.com

Attribut vide avec Ruby HAML

J'implémente les microformats de schéma sur un projet Ruby à l'aide de HAML et je ne vois pas comment définir un attribut vide sur une balise. J'ai essayé nil et faux, mais ils ne sont tout simplement pas montrés.

Exemple: <div itemscope>

Je suis tring pour définir un attribut itemscope vide.

Code ajouté à partir du commentaire de @StrangeElement:

Mon code: 

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

:itemscope => true semble être l'approche recommandée par la documentation de HAML. J'obtiens le même résultat qu'avec :itemscope => '', un attribut XHTML-valid avec une valeur vide (c'est-à-dire <div itemscope="">).

Probablement bien, mais je préférerais qu'il soit vide, comme indiqué dans la documentation Schema. 

49
StrangeElement

En utilisant quelque chose comme

%div{:itemscope => true}

est le bon moyen de spécifier cela dans votre fichier Haml.

La manière dont cela est rendu dépend de la manière dont vous définissez l'option format de Haml . La valeur par défaut dans Haml 3.1 est xhtml, ce qui rendra itemprop='itemprop', qui est valide xhtml. Pour rendre avec des attributs minimisés (tels que <div itemscope>), vous devez définir le format sur html4 ou html5. (Dans Rails 3, la valeur par défaut est html5 et dans Haml 4.0, la valeur par défaut est html5).

Comment définir les options de Haml dépend de son utilisation, voir la section options dans la documentation .

Par exemple, en utilisant Haml directement en Ruby, ceci:

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

produit le xhtml par défaut avec les attributs complets:

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

Mais ça:

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

produit le résultat souhaité avec des attributs minimisés:

<div itemscope></div>
74
matt

La réponse acceptée fonctionne, mais produit un attribut HTML avec une valeur.

Si vous voulez que l'attribut soit uniquement imprimé en HTML, sans valeur, vous pouvez utiliser la syntaxe des attributs de style HTML de de HAML :

%div(itemscope)
0
Andrea Salicetti

Si quelqu'un est intéressé par la façon de mettre plus de mots de cette façon, il peut utiliser "foo bar" => true:

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

le résultat est:

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

et fonctionne comme prévu.

0
Nakilon