2011-06-03 10 views
12

¿Qué debo hacer para poder usar CoffeeScript en las vistas de Rails JS? Por ejemplo:¿Puedo usar CoffeeScript en las vistas ejecutadas en render.js?

def index 
    format.js { render :layout => false } 
end 

¿Qué necesitaría hacer para que los carriles de usar index.js.coffee?

+0

¿Qué pasa si usted acaba de añadir .coffee extensión? (Si está utilizando Rails 3.1) – bor1s

+0

lo hice, pero parece que no funciona. – Geo

+0

¿Qué versión de Rails usas? – bor1s

Respuesta

13

Aún no es compatible con 3.1. Tendrá que usar Coffeebeans.


Actualización: En la actualidad se admite en los carriles de 3,2

+6

¡Tienes que estar bromeando! –

+0

Es compatible con 3.2 – Artur79

+0

Actualizado, gracias. – David

15

respuesta de Johnny es correcta. Si nos fijamos en la pull request enlazado desde la página CoffeeBeans, tiene DHH diciendo

Una vez que tenemos una implementación rápida, limpia, es bienvenido en el núcleo. 3.2 es un objetivo más probable, sin embargo.

me hablaron brevemente con Sam Stephenson y Josh Peek sobre esto en RailsConf, ya que esto le faltaba un pueblo de características me habían preguntado sobre después de mi charla CoffeeScript. Después de todo, Rails 3.1 está presionando CoffeeScript por defecto bastante duro; parece extraño que haya lugares donde se deba usar JS puro. La reacción de Sam fue que esto no sería eficiente, porque tendrías que iniciar el compilador CoffeeScript en cada solicitud de página, incluso en producción. Esto se debe a código como

<%= coffee_script_tag do %> 
    alert "coffee script is #{verb}!" 
<% end %> 

crea una interpolación ERB (no un CoffeeScript interpolación desafortunado que ambos utilizan la misma sintaxis), potencialmente dando una cadena de código distinta CoffeeScript en cada petición. Y no hay forma de saber, a partir de la implementación coffee_script_tag, si el código dado va a ser el mismo siempre (es decir, si hay una interpolación ERB o no).

Ahora, el compilador CoffeeScript es muy rápido, pero la compilación de JavaScript todavía agregará un poco más de tiempo a cada solicitud. Por lo tanto, el equipo Rails es reacio a fomentar la práctica.

Por razones de eficacia, y para evitar la ambigüedad entre interpolaciones ERB e interpolaciones CoffeeScript, probablemente deba conservar su CoffeeScript en algún lugar (tal vez como un archivo .coffee en el mismo directorio que su vista) y compilarlo en JavaScript manualmente .

+0

Muchas gracias. Acabo de enfrentar este problema hoy y noté cómo se maneja este problema en Rails. En mi caso, voy a traducir mi coffeescript para solicitudes de JavaScript a JS simple hasta que Rails lo soporte de fábrica. –

+0

Está mostrando lo que podemos hacer en la vista, pero en la pregunta ¿no está preguntando cómo hacer lo mismo dentro del controlador, o dentro de un archivo ruby? – uday

10

Esto ahora está trabajando en Rails 3.2. Por ejemplo, tengo un recurso llamado libro. Este recurso tiene un archivo en app/views/libros/index.html.erb con lo siguiente:

<%= link_to 'test me', new_book_path(color: 'blue'), remote: true %> 

Entonces tengo un archivo en app/views/libros/new.js.coffee a ≈ con el siguiente código:

test = -> 
    'this is a test' 

console.log test() 
console.log("<%= params[:color] %>") 

veo:

'this is a test' 
'blue' 

en mi consola de navegador.

+1

Esto está confirmado. Acabo de usarlo con Rails 3.2.3 sin problemas. – stebooks

+2

¿Has conseguido esto para trabajar en la producción? Las extensiones .cafe en vistas funciona en modo dev, pero falla en el modo de producción. Estoy usando Rails 3.2.3 –

1

Si no desea instalar CoffeeBeans, aquí hay un tipo de forma rápida y sucia para hacerlo por la piratería en el erb outputter un poco:

<% 
require 'coffee-script'; 
def coffee_script; CoffeeScript.compile yield '' end %> 
<script type="text/javascript"> 
<% compiled = coffee_script do |_erbout|%> 
-> 
    console.log 'works! this part is coffeescript!' 
<% end %> 
<% _erbout.concat compiled %> 
</script> 
Cuestiones relacionadas