2011-09-12 20 views
8

posts.js.coffee.erbcủa Ruby bên CoffeeScript

$('.list').infinitescroll {url: '<%= list_posts_path %>', triggerAt: 700, container: $('.container'), appendTo: $('.container'), page: 1} 

Điều này làm cho một ngoại lệ:

throw Error("NameError: undefined local variable or method `list_posts_path' for #<#:0x00000003557438>\n ...

list_posts_path lợi nhuận con đường đúng nếu tôi sử dụng nó trong bộ điều khiển. Tôi đã làm gì sai?

Trả lời

12

Vâng, đừng làm vậy. :)

Bạn không ở trong bộ điều khiển, mặc dù bạn đang sử dụng ERB. Trình biên dịch coffeescript không biết bất cứ điều gì về tuyến đường của bạn hoặc người trợ giúp định tuyến, mà quan điểm của bạn thường được truy cập thông qua bộ điều khiển.

+0

Có cách nào để có được con đường đó trong js? – Jonas

+5

@ Jonas Cách tốt nhất để làm cho dữ liệu phía máy chủ có sẵn cho JS là đặt một thẻ '

3

thay thế khác là để thiết lập một thuộc tính dữ liệu giữ con đường của bạn trên một số yếu tố liên quan ... sau đó lấy nó với mã js/cà phê

2

bao gồm

<% environment.context_class.instance_eval { include Rails.application.routes.url_helpers } %> 

vào đầu của tập tin coffeescript và sau đó bạn sẽ có thể truy cập các tuyến đường

7

Tôi đã gặp vấn đề tương tự và như đã đề cập từ sớm, bạn có thể làm điều gì đó như:

your_layout.html.erb

<%= render partial: 'your_partial.html.erb', locals: { action_url: list_posts_path } %>

_your_partial.html.erb

<div id='container' data-action-url="<%= action_url %>" .... >

posts.js.coffee.erb

jQuery -> url = $('#container').data('action-url') console.log "loading url: #{url} !!!"