布尔属性,如HTML 5草案规定:
http://dev.w3.org/html5/spec/Overview.html#boolean-attributes
一个元素上存在布尔属性代表着真值,而不存在该属性则代表假值。
如果该属性存在,其值只能是空字符串或与属性规范名称不区分大小写的ASCII字符匹配值(首尾不能有空格)。
我的页面使用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 => true”更改为“:checked => true”,然后它将在div元素的属性列表中正确呈现为“checked ='checked'”。
我希望它呈现出仅使用“itemscope”的最小化版本……但我不确定如何使用content_tag选项来实现。我可以很容易地发送“:itemscope =>'itemscope'”,但很难说谷歌是否会正确解释它,因为他们所有的示例和规范都显示了最小化版本。请参见此处http://www.google.com/support/webmasters/bin/answer.py?answer=146861以查看这些属性是什么以及我为什么要使用它们(微数据格式)。
有人知道如何有效地使任何属性以true或false(ruby布尔)值发送到content_tag以呈现没有任何值而不是尝试将布尔值字符串化吗?谢谢 :)