Ruby里面的CoffeeScript

Jon*_*nas 9 ruby-on-rails coffeescript

posts.js.coffee.erb

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

这是一个例外:

抛出错误("NameError:未定义的局部变量或方法`list_posts_path'用于#<#:0x00000003557438> \n ...

如果我在控制器中使用它,list_posts_path将返回正确的路径.我做错了什么?

kar*_*kie 12

是的,不要那样做.:)

即使您正在使用ERB,也不在控制器内部.coffeescript编译器不了解您的路由或路由助手,您的视图通常可通过控制器访问.

  • @Jonas为JS提供服务器端数据的最好方法是在页面中(通过视图或布局)放置一个`<script>`标签,提供*just*那些数据.(或者,如果数据不需要在页面加载时可用,请使用Ajax.)这样,所有其他JS都可以连接,缩小和缓存. (5认同)

evb*_*uno 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} !!!"