2010-11-23 14 views
86

Konu, tabii ki, yakut sembollerin tireleri sevmemesidir. Yani böyle bir şey tabii ki çalışmaz:html5 data niteliklerini raylar content_tag yardımcısı ile kullanmanın en iyi yolu?

content_tag(:div, "Some Text", :id => "foo", 'data-data_attr' => some_variable) 

Yada sadece interpole olabilir:

"<div id='foo' data-data_attr='#{some_variable}'>Some Text</div>".html_safe 

I

content_tag(:div, "Some Text", :id => "foo", :data-data_attr => some_variable) 

Bir seçenek bir sembol yerine bir dize kullanmaktır Sorta daha sonra tercih eder ama her ikisi de biraz kaba görünüyor. Daha iyi bir yolu bilen var mı?

cevap

128

Raylar 3.1 gemi ile yerleşik yardımcıları:

http://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-tag

Ör,

tag("div", :data => {:name => 'Stephen', :city_state => %w(Chicago IL)}) 
# => <div data-name="Stephen" data-city-state="[&quot;Chicago&quot;,&quot;IL&quot;]" /> 
+0

Bu, aslında sadece URL'mdeki şeyleri ekler. Bir veri özelliği eklemez. –

+2

Elbette ki .... Ama hem bir url hash VE html seçenekleri hash alır bir yardımcı kullanıyorsanız, her iki hashes kıvırcık parantez {} içinde açıkça sarmak zorunda. link_to örneğin: link_to "label", {: action => blub}, {: data => {: foo =>: bar},: class => "test"} – reto

+0

Bu çalışma: 'data-bv-notempty -message '=> "Kullanıcı adı gerekli" – Ivan

57

Sembollü tırnak kullanmayı denediniz mi? Bir şey gibi:

:"data-foo" => :bar 
+1

En iyi cevap tam burada! – imjp

+1

Bu adama kabul et. – JellicleCat

+3

OP'lerin ikinci önerisi arasındaki farkı göremiyorum ... – reto

-3

Her zaman bir yardımcı kötü bir fikir değil

<%= div_data_tag the_id, some_text, some_data %> 
9

yazabilir öyleyse size kendi yardımcı işlevi oluşturmak ama yaklaşık esasen beni olmanın fusy ne için bir overkill biraz görünüyor olabilir sözdizimi. Umduğum şey olan raylara inşa edilmiş hiçbir şey yok. Sadece bu kullanacağız:

content_tag(:div, "Some Text", :id => "foo", 'data-data_attr' => some_variable) 
5

JQuery Air (codeschool.com) Seviye 1 Örnek 1

Codeschool/platformdan bağımsız sürüm

<section id="tabs"> 
    <ul> 
    <li><a href="#2012-09-27" data-flights="6">Sep 27</a></li> 
    <li><a href="#2012-09-28" data-flights="5">Sep 28</a></li> 
    <li><a href="#2012-09-29" data-flights="5">Sep 29</a></li> 
    </ul> 
</section> 

Raylar Sürüm önceki yanıtlarını

<section id="tabs"> 
    <ul> 
    <li><%= content_tag(:a, "Sep 27",:href=> "#2012-09-27", :data => { :flights => "6" }) %></li> 
    <li><%= content_tag(:a, "Sep 28",:href=> "#2012-09-28", :data => { :flights => "5" }) %></li> 
    <li><%= content_tag(:a, "Sep 29",:href=> "#2012-09-29", :data => { :flights => "5" }) %></li> 
    </ul> 
</section> 
1

Bina, burada şimdi bunu yapmak için kurallı bir yolu:

content_tag(:div, "Some Text", id: "foo", data: { attr: some_variable }) 
content_tag(:div, "Some Text", id: "foo", data: { "other-attr" => some_variable }) 

üretir Hangi:

<div id="foo" data-attr="some variable">Some Text</div> 
<div id="foo" data-other-attr="some variable">Some Text</div> 
İlgili konular