2012-06-20 32 views
34

Estoy intentando crear un formulario de comentarios basado en ajax que actualizará mi lista de comentarios cuando se envíe. Bastante básico.Representación parcial en el archivo js.erb

Tengo un parcial comments/_single.html.haml que tiene una sola <li> etiqueta con información básica comentario y aquí está mi archivo comments/create.js.erb (en realidad se trata de tres archivos de prueba diferentes fusionaron en uno solo para mostrar lo que mi problema es):

$('#comments ul.comments').append("<%= render :partial => 'comments/single', :locals => { :c => @comment } %>"); 
$('#comments ul.comments').append("<%= render :partial => 'comments/foobar' %>"); 
$('#comments ul.comments').append("foobar"); 
alert('foobar'); 

El contenido para comments/_foobar.html.haml es solo foobar, no html adentro. Mi problema es que las dos primeras líneas no funcionan. No hay errores en mi consola del servidor de desarrollo, el inspector de objetos dice que el código de comentario fue devuelto correctamente, pero no se agrega a mi lista de comentarios. La tercera línea funciona bien y la cuarta. Parece que hay algunos problemas con el uso de render.

Respuesta

90

Cuando la prestación parciales dentro de código Javascript, se debe utilizar el método escape_javascript, al igual que

$('#comments ul.comments').append("<%= escape_javascript render(:partial => 'comments/single', :locals => { :c => @comment }) %>"); 

Este método tiene el alias j, por lo que también puede hacer esto

$('#comments ul.comments').append("<%= j render(:partial => 'comments/foobar') %>"); 

El método Escapes retornos de carro y comillas simples y dobles para segmentos de JavaScript ActionView::Helpers::JavaScriptHelper Rails docs

+1

¡Gracias! Gente, no olviden el método escape_javacript. – Abel

+0

qué pasó con las variables locales en la versión simplificada – bobbdelsol

Cuestiones relacionadas