2011-09-12 35 views
8

posts.js.coffee.erb紅寶石內的CoffeeScript

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

這使得一個例外:

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

list_posts_path的回報,如果我使用的控制器正確的路徑。我做錯了什麼?

回答

12

是的,不要這樣做。 :)

即使您使用ERB,您也不在控制器內。 coffeescript編譯器不知道任何有關您的路徑或路由幫助器的信息,您的視圖通常通過控制器訪問。

+0

有沒有辦法如何獲得js的路徑? – Jonas

+5

@Jonas爲JS提供服務器端數據的最佳方式是在頁面中(通過視圖或佈局)放置一個'

3

另一種選擇是設置一個數據屬性持有一些相關元素在你的路徑...然後用JS /咖啡代碼抓住它

2

包括

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

在CoffeeScript的文件的開頭然後你就可以訪問路線

7

我有同樣的問題,並儘早提到的,你可以這樣做:

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} !!!"