2011-03-10 4 views
6

부울 특성은 HTML 5 초안 표준에 정의 :Ruby on Rails content_tag options 해시 - 부울 html 속성을 설정 하시겠습니까?

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'그러나 그것들이 모든 예제와 사양이 최소화 된 버전을 보여주기 때문에 google에 의해 정확하게 해석 될지 말하기는 어렵다. 이 속성들이 무엇인지 알기 위해서 여기를 보시려면 http://www.google.com/support/webmasters/bin/answer.py?answer=146861

아무 것도없이 사실상 또는 거짓 (루비 부울) 값을 true 또는 false (루비 부울) 값으로 보내면 어떤 방법으로도 렌더링 할 수 있습니다. 부울 값을 문자열로 바꾸는 대신 값을 사용 하시겠습니까? 감사합니다 :)

+0

패치에 대한 좋은 생각처럼 소리 :) 패치는이 경우,하지 레일에 HAML이 될 것입니다 있지만. –

+2

아니요, 문제는 HAML이 아닌 Rails의 content_tag 도우미 및 관련 함수에 있습니다. – jakeonrails

답변

2

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를 다시 시작하면 좋을 것입니다. 나는 그저 물건을 빈 속성을 추가하는 방법을 모르며, 체크 된 것, 사용 불가능한 것, 읽기 전용 등의 작업을하는 법을 알고있다.

+2

나는 이것을 줄 것이다. 그러나 '똑똑한'가치를보고 현명하게 알고 싶다면 = – nzifnab

+0

실제로, 우리는 "레일스 마술"에 익숙해 져야한다. 우리가 기대하는 바를 실망시킵니다. 하지만 나는 그것이 "data-is_active"보다는 오히려 그 속성에 대한 참 또는 거짓 값을보기 위해 javascript에서 기대할 수있는 사용자 정의 속성 ("data-is_active"라고 생각하는)을 true로 설정 한 이후로, == "data-is_active" – jakeonrails

+1

@nzifnab에 동의합니다. 부울 Ruby 값 (true 또는 false)을 제공하면 호환 부울 HTML 속성으로 처리 할만큼 똑똑해야합니다. 리터럴 문자열 'true'또는 'false'를 원하면 Ruby 값 'true'또는 'false'를 제공하십시오! –

3

해키하지만 쉬운 방법 : content_tag('div itemscope', ...)