2012-01-23 26 views
7

Trong ray của tôi 3.1.3 ứng dụng, tôi muốn chèn một số mã ERB trong hồ sơ của tôi javascript nhưng nó không được phân tích cú pháp cho một số lý do:Nhúng đang ERB trong javascript cho đường ống dẫn tài sản

# app/assets/javascripts/application.js 
//= require_tree ./shared 

# app/assets/javascripts/shared/shared.js.erb 
MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">'; 

Gets render như thế này trong /application.js:

MM.loading = '<img src=" asset_path("icons/ajax-loader.gif") >">'; 

Tôi không thể thấy thêm bất kỳ bước nào trong hướng dẫn đường ray - có điều gì tôi thiếu không? Btw Tôi đang sử dụng haml cho các tệp xem và cũng đã thử ở trên với .js.haml, bao gồm trong #{...}.

Trả lời

10

Bạn có lỗi cú pháp trong mã của mình. Đây:

MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">'; 

phải được điều này:

MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") %>">'; 

Bạn bị mất tích tag ERB đóng cửa cho khối helper mã.

+0

Ah, được phát hiện ... đó là tất cả! – Zubin

+0

Ồ, tôi đã chụp hai bức ảnh. –

-2

Thêm phần mở rộng .erb vào ứng dụng của bạn.js và nó sẽ hoạt động.

Nội dung của các tệp bắt buộc được đưa vào trước, sau đó được xử lý theo các tiện ích trên tệp kê khai.

+0

Ý tưởng hay nhưng không hiệu quả đối với tôi. Đã thử 'console.log (" 1 + 1 = <% = đặt 1 + 1%> ");' trong 'shared.js.erb' sau khi thêm' .erb' vào tên tệp kê khai. – Zubin

+0

Điều này là không cần thiết. Sau khi sửa các dấu ngoặc nó làm việc mà không cần thêm .erb vào tên tệp kê khai. – Zubin

0

Trong Rails 4, thay vì sử dụng một cái nhìn js.erb, tôi khuyên bạn nên dính vào các đường ống dẫn tài sản bất cứ khi nào có thể, và vượt qua các biến với Js sử dụng gon hoặc một số kỹ thuật khác được thảo luận tại địa chỉ: Ruby on Rails - Send JavaScript variable from controller to external Javascript asset file

Với gon:

app/views/layouts/application.html.erb:

<head> 
    <meta charset="utf-8"/> 
    <%= include_gon %> 

app/controllers/application_controller.rb:

0.123.
before_filter { gon.path = asset_path('icons/ajax-loader.gif') } 

ứng dụng/tài sản/Javascripts/shared.js.coffee:

MM.loading = '<img src="' + gon.path + '">'; 

Phương pháp này là nhanh hơn bởi vì tập tin được biên dịch sẵn một lần duy nhất lúc khởi động, được phục vụ bởi các máy chủ thay vì thông qua Rails, và trên cùng một yêu cầu HTTP như phần còn lại của J.

Trường hợp sử dụng cụ thể khi chuyển URL nội dung sang Javascript đã được hỏi tại: URL of images in JavaScript code using Rails 3.1 asset pipeline?

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