2011-09-12 13 views
8

posts.js.coffee.erbRubí dentro CoffeeScript

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

Esto hace una excepción:

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

list_posts_path rendimientos camino correcto si lo uso en el controlador. ¿Qué hice mal?

Respuesta

12

Sí, no hagas eso. :)

No está dentro de un controlador, aunque está utilizando ERB. El compilador de coffeescript no sabe nada sobre las rutas o los ayudantes de enrutamiento, a los que normalmente acceden sus vistas a través del controlador.

+0

¿Hay alguna manera de conseguir ese camino en js? – Jonas

+5

@Jonas La mejor manera de hacer que los datos del lado del servidor estén disponibles para el JS es poner una etiqueta '

3

otra alternativa es establecer un atributo de datos que contiene la ruta en algún elemento relevante ... entonces agarrarlo con el código JS/café

2

incluyen

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

al comienzo del archivo CoffeeScript y entonces usted será capaz de vías de acceso

7

que tenían el mismo problema, y ​​como se mencionó temprano, usted podría hacer algo como:

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