javascript - img - Dirige a los ayudantes en la cartera de activos
title label html (2)
utilizando Rails 3.1.0.rc4, estoy intentando acceder a un helper de ruta en un archivo javascript (event.js.erb en este caso) y parece que no están cargados en ese momento. Al solicitar el archivo combinado /assets/application.js, obtengo:
throw Error("NameError: undefined local variable or method `events_path'' for #<#<Class:0x00000001580010>:0x00000003191510>/n (in /<...>/app/assets/javascripts/event.js.erb)")
¿Alguna idea de cómo acceder al ayudante de ruta allí?
ACTUALIZACIÓN: Ahora hay una gema que hace esto por usted: js-routes
El problema es que Sprockets está evaluando el ERB fuera del contexto de su aplicación Rails, y la mayoría de las cosas que espera no están allí.
Puede agregar cosas a su contexto de Piñones como lo hace:
Rails.application.assets.context_class.class_eval do
include Rails.application.routes.url_helpers
end
Eso está muy bien, pero conseguir los ayudantes que requieren una identificación para trabajar es un poco más complicado. Voy a utilizar una técnica llamada Plantilla de URI :
var event_path = "<%= CGI.unescape event_path(''{event_id}'') %>";
que devuelve /events/{event_id}
que puedes representar en una url usando un objeto como { event_id: 1 }
. Vea el método de asignación de String # de SugarJS como ejemplo de implementación de esto. También podrías enrollar el tuyo como lo hice yo.
Podrías mover el archivo a las vistas donde tiene acceso al contexto adecuado, luego tirarlo al cliente desde una etiqueta de origen JS. Refiriéndose a MyRailsApp :: Application.routes.url_helpers puede no ser el mejor si está escribiendo un motor.