2012-11-15 58 views
15

Tôi cần hiển thị hình ảnh trên canvas HTML5 nằm trong đường dẫn nội dung Rails, nhưng tôi cần biết đường dẫn cho nội dung từ JavaScript. Tôi đang sử dụng js-routes cho các phần khác của ứng dụng, nhưng dường như không cung cấp cách để nhận đường dẫn đến nội dung nào đó trong đường dẫn nội dung.Có được đường dẫn nội dung từ JavaScript

Cách chính xác để nhận đường dẫn đến nội dung Rails (ví dụ: hình ảnh) từ JavaScript?

Trả lời

18

Trong Rails Asset Pipeline guide, chúng cung cấp ví dụ về nội dung mã hóa trong bảng định kiểu của bạn bằng cách xử lý trước các bảng kiểu với ERB. Bạn có thể sử dụng kỹ thuật tương tự với JavaScript, giả sử bạn tack một .erb đến cuối tên tập tin:

var someAssetPath = "<%= asset_path('some_image.png') %>"; 
+0

Cảm ơn bạn đã phản ứng nhanh chóng .... Tôi nghĩ về việc này, nhưng có thể có nhiều khác nhau tài sản tôi muốn con đường đến, vì vậy điều này có thể nhận được cồng kềnh và biến thành một cơn ác mộng bảo trì như tài sản được thêm vào hoặc loại bỏ. Tôi cũng đã xem xét việc tạo phương thức hành động của riêng mình để trả lại URL cho tên tài sản được cung cấp, nhưng tôi đã hy vọng tìm được giải pháp thay thế tốt hơn. – senfo

+4

Cá nhân tôi nghĩ rằng đây là một gợi ý khủng khiếp, mặc dù nó là khả thi. Rails không phải là một trình biên dịch trước JavaScript. –

+1

@ArxPoetica, vậy tại sao họ lại nắm lấy CoffeeScript biên dịch sang JavaScript? – Mischa

6

Thanh toán các js_assets(Javascript helper in rails projects) đá quý. Tôi nghĩ đó là chính xác những gì bạn cần.

Từ các tài liệu:

Lấy đường dẫn đến mẫu ứng dụng/tài sản/Javascripts/chữ đỏ/views/index.html trong javascript: var path = asset_path('rubrics/views/index.html')

5

Đối với những người sử dụng HAML bạn có thể do:

:javascript 
    var assetPath = "#{asset_path('some_image.jpg')}"; 
+1

Tôi đã phải sử dụng dấu ngoặc kép để làm cho nó hoạt động, nhưng cảm ơn đã giúp tôi đi đúng hướng. – cubsker

6

Tại sao không thêm thuộc tính dữ liệu cho đường dẫn bên trong phần tử trong tệp .erb của bạn và sau đó truy xuất tệp đó bằng JQuery?

bên some_template.html.erb

<%= content_tag(:div, "", id: 'some-id', data:{path_to_asset: asset_path("some_image.png")}) %> 

sau đó trong some_javascript.js

var assetPath = $("#some-id").data("pathToAsset"); 
+0

tôi thích loại gợi ý này. Thay vì phụ thêm .erb vào tệp js của bạn. – kev

+1

Tôi thích điều này quá, bởi vì nếu bạn cần sử dụng một biến có nguồn gốc từ javascript trong đường dẫn hình ảnh của bạn, bạn không thể sử dụng đường dẫn tài sản với tiêm erb. –

Các vấn đề liên quan