7

HTML 5 ドラフト仕様で定義されているブール属性:

http://dev.w3.org/html5/spec/Overview.html#boolean-attributes

要素にブール属性が存在する場合は真の値を表し、属性が存在しない場合は偽の値を表します。

属性が存在する場合、その値は空の文字列か、大文字と小文字を区別せずに属性の正規名に一致し、先頭または末尾に空白がない値である必要があります。

私のページは html5 DTD を使用しています。独自のヘルパーで content_tag ビュー ヘルパーを使用しようとしていますが、ブール属性を渡す際に問題が発生しています。

具体的には、これは私のヘルパーです:

def itemscope(type, options = {}, &block)
  content_tag(
    :div, {
      :itemscope => true,
      :itemtype => data_definition_url(type)
    }.merge(options),
    true,
    &block
  )
end

def data_definition_url(type)
  "http://data-vocabulary.org/#{type}"
end

私の見解では、次のように呼び出すとしましょう(私はhamlを使用しています):

= itemscope("Organization") do
  %h1 Here's some content

これは私がレンダリングしたいものです:

<div itemscope itemtype='http://data-vocabulary.org/Organization'>
  <h1>Here's some content</h1>
</div>

しかし、これは私が実際に得ているものです:

<div itemscope='true' itemtype='http://data-vocabulary.org/Organization'>
  <h1>Here's some content</h1>
</div>

w3仕様によると、これは無効なマークアップです。ブール属性の有効な値は、属性自体の名前であるか、値がまったくないかのいずれかです。

:itemscope => truetoを変更すると、 div 要素の属性リストの:checked => trueように属性が正しくレンダリングされるため、面倒です。checked='checked'

ただ...の最小化されたバージョンをレンダリングすることをお勧めしますが、 content_tag オプションitemscope使用してそれを行う方法がわかりません。:itemscope => 'itemscope' は非常に簡単に送信できますが、すべての例と仕様が最小化されたバージョンを示しているため、それが Google によって正しく解釈されるかどうかを判断するのは困難です。http://www.google.com/support/webmasters/bin/answer.py?answer=146861を参照 して、これらのプロパティとその使用理由を確認してください (Microdata 形式)

ブール値を文字列化しようとする代わりに、値なしでレンダリングするために content_tag で true または false (ルビーブール値) 値を送信された属性を効果的に取得する方法を知っている人はいますか? ありがとう :)

4

2 に答える 2

3

次の内容を、というイニシャライザに入れます。config/initializers/boolean_attributes.rb

# add any other boolean attributes to the %w() below to make them work like checked.
BOOLEAN_ATTRIBUTES = %w(itemscope).to_set
BOOLEAN_ATTRIBUTES.merge(BOOLEAN_ATTRIBUTES.map {|attribute| attribute.to_sym })
ActionView::Helpers::TagHelper::BOOLEAN_ATTRIBUTES.merge(BOOLEAN_ATTRIBUTES)

出来上がり!Rails を再起動すると、準備完了です。空の属性を追加する方法、チェック済み、無効、読み取り専用などのように機能させる方法がわかりません...

于 2011-03-10T02:20:19.327 に答える