Beste Möglichkeit, HTML5-Datenattribute mit dem Rails-Helfer content_tag zu verwenden?


102

Das Problem ist natürlich, dass Rubinsymbole keine Bindestriche mögen. So etwas funktioniert offensichtlich nicht:

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

Eine Möglichkeit besteht darin, eine Zeichenfolge anstelle eines Symbols zu verwenden:

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

Oder ich könnte einfach interpolieren:

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

Ich bevorzuge das spätere, aber beide scheinen ein wenig eklig zu sein. Kennt jemand einen besseren Weg?

Antworten:


140

Rails 3.1 wird mit eingebauten Helfern geliefert:

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

Z.B,

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

Dies hängt eigentlich nur Dinge an meine URL an. Es wird kein Datenattribut hinzugefügt.
Jim Wharton

2
Natürlich ... Aber wenn Sie einen Helfer verwenden, der sowohl einen URL-Hash als auch einen HTML-Options-Hash verwendet, müssen Sie beide Hashes explizit in geschweifte Klammern {} setzen. link_to zum Beispiel: link_to "label", {: action => blub}, {: data => {: foo =>: bar} ,: class => "test"}
reto

Dies funktioniert: 'data-bv-notempty-message' => "Der Benutzername ist erforderlich"
Ivan

66

Haben Sie versucht, Anführungszeichen mit Symbol zu verwenden? Etwas wie:

:"data-foo" => :bar

1
@reto - überprüfen Sie das Antwortdatum.)
Eimantas

Warum der Startpunkt :?
Joshua Pinter

1
Der Doppelpunkt macht den Schlüssel zum Symbol.
Eimantas

10

Ein Helfer ist keine schlechte Idee, scheint aber ein bisschen übertrieben für das zu sein, was mich an Syntax im Grunde verwirrt. Ich nehme an, es ist nichts in Schienen eingebaut, was ich mir erhofft hatte. Ich werde nur das verwenden:

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

6

JQuery Air (codeschool.com) Level 1, Beispiel 1

Codeschool / plattformunabhängige Version

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

Schienenversion

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

5

Aufbauend auf früheren Antworten ist hier der kanonische Weg, dies jetzt zu tun:

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

Was erzeugt:

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

-3

Sie können jederzeit eine eigene Hilfsfunktion erstellen, um dann schreiben zu können

<%= div_data_tag the_id, some_text, some_data %>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.