Cách tốt nhất để sử dụng thuộc tính dữ liệu html5 với trình trợ giúp rails content_tag?


102

Tất nhiên, vấn đề là các biểu tượng ruby ​​không thích dấu gạch nối. Vì vậy, một cái gì đó như thế này rõ ràng sẽ không hoạt động:

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

Một tùy chọn là sử dụng một chuỗi thay vì một ký hiệu:

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

Hoặc tôi có thể nội suy:

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

Tôi sắp xếp thích cái sau hơn nhưng cả hai đều có vẻ hơi thô. Có ai biết cách tốt hơn không?

Câu trả lời:


140

Rails 3.1 đi kèm với các trình trợ giúp tích hợp:

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

Ví dụ,

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

Điều này thực sự chỉ gắn mọi thứ vào URL của tôi. Nó không thêm thuộc tính dữ liệu.
Jim Wharton

2
Tất nhiên là có .... Nhưng nếu bạn đang sử dụng trình trợ giúp lấy cả băm url VÀ băm tùy chọn html, bạn phải đặt rõ ràng cả hai băm trong dấu ngoặc nhọn {}. link_to ví dụ: link_to "label", {: action => blub}, {: data => {: foo =>: thanh},: class => "test"}
Reto

Công trình này: 'data-bv-notempty-thông báo' => "Tên người dùng được yêu cầu"
Ivan

66

Bạn đã thử sử dụng dấu ngoặc kép có ký hiệu chưa? Cái gì đó như:

:"data-foo" => :bar

1
@reto - kiểm tra ngày câu trả lời).
Eimantas

Tại sao dấu hai chấm bắt đầu :?
Joshua Pinter

1
Dấu hai chấm làm cho chìa khóa trở thành một biểu tượng.
Eimantas

10

Một người trợ giúp không phải là một ý tưởng tồi nhưng có vẻ hơi quá mức cần thiết đối với những gì về cơ bản tôi đang khó hiểu về cú pháp. Tôi cho rằng không có gì được xây dựng trong đường ray, đó là những gì tôi đã hy vọng. Tôi sẽ chỉ sử dụng cái này:

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

6

JQuery Air (Codechool.com) Cấp 1, Ví dụ 1

Codeschool / phiên bản độc lập với nền tảng

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

Phiên bản Rails

<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

Dựa trên các câu trả lời trước đó, đây là cách chuẩn để thực hiện điều đó ngay bây giờ:

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

Tạo ra:

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

-3

Bạn luôn có thể tạo chức năng trợ giúp của riêng mình để sau đó bạn có thể viết

<%= div_data_tag the_id, some_text, some_data %>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.