web-dev-qa-db-ja.com

Ruby HAMLの空の属性

HAMLを使用してRubyプロジェクトにスキーママイクロフォーマットを実装していますが、タグに空の属性を設定する方法がわかりません。nilとfalseを試しましたが、表示されません。

例:<div itemscope>

空のitemscope属性を設定しようとしています。

@StrangeElementによるコメントから追加されたコード:

私のコード:

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

:itemscope => trueは、HAMLのドキュメントから推奨されるアプローチのようです。空の値(つまり、:itemscope => '')を持つXHTML有効属性である<div itemscope="">で得られるのと同じ結果が得られます。

おそらく問題ありませんが、スキーマドキュメントに記載されているように、空にしておきたいと思います。

49
StrangeElement

次のようなものを使用する

%div{:itemscope => true}

hamlファイルでこれを指定する正しい方法です。

これがどのようにレンダリングされるかは、Hamlの format option をどのように設定するかによって異なります。 Haml3.1のデフォルトはxhtmlであり、これにより、有効なxhtmlであるitemprop='itemprop'としてレンダリングされます。最小化された属性(<div itemscope>など)でレンダリングするには、フォーマットをhtml4またはhtml5に設定する必要があります。 (Rails 3ではデフォルトはhtml5であり、Haml4.0ではデフォルトはhtml5です)。

Hamlオプションの設定方法は、使用方法によって異なります。 ドキュメントのオプションセクション を参照してください。

たとえば、Rubyで直接Hamlを使用すると、次のようになります。

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>
74
matt

受け入れられた回答は機能しますが、値を持つHTML属性を生成します。

属性を値なしでHTMLにのみ出力する場合は、 HAMLのHTMLスタイルの属性構文 を使用できます。

%div(itemscope)
0

誰かがそのようにもっと多くの単語を置く方法に興味があるなら、彼は"foo bar" => trueを使うかもしれません:

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

結果は次のとおりです。

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

期待どおりに動作します。

0
Nakilon