2011-08-29 13 views
6

Quiero hacer un parcial en mi archivo js.erb para poder usar el código HTML generado en mi Javascript. Aquí hay un código para servir como un ejemplo.Representación parcial dentro de js.erb. ¿Es posible obtener una cadena sin procesar para poder quitar el espacio en blanco?

create.js.erb

$(function(){ 
    var html = "<%= render(:partial => `pretty_box`) %>"; 
    $("#container").prepend(html); 
}); 

_pretty_box.html.haml

.pretty_box_container 
    .title 
    Something Pretty 

Cuando se representa create.js.erb, me sale el siguiente:

$(function(){ 
    var html = "<div class="pretty_box_container> 
    <div class="title"> 
     Something Pretty 
    </div> 
</div>"; 
    $("#container").prepend(html); 
}); 

Como era de esperar, esto rompe mi javascript Necesito quitar los espacios en blanco del resultado de renderizar el parcial. El problema es que el valor de retorno de render es un objeto ActiveSupport::SafeBuffer, que anula todos los métodos "inseguros" (consulte UNSAFE_STRING_METHODS), incluido strip. Llamando al render(:partial => pretty_box ).strip HTML-codifica toda la cadena.

He intentado todo tipo de combinaciones utilizando los métodos html_safe o to_s. No funcionan porque devuelven self, y usar raw tampoco funciona porque llama al to_s.html.safe.

Sé que puedo agregar > y < caracteres a mi HAML, pero no quiero hacer eso para cada línea de cada parcial.

Respuesta

8

El problema no son los espacios en blanco, sino las comillas.

$(function(){ 
    var html = "<div class="pretty_box_container> 
         ^
         This is where you go wrong 

Prueba esto:

$(function(){ 
    var html = "<%= escape_javascript(render(:partial => 'pretty_box')) %>"; 
    $("#container").prepend(html); 
}); 

Salida this answer en StackOverflow para una explicación acerca escape_javascript.

+0

Gracias mischa. Voy a probar esto esta noche. – John

+0

Funcionado. ¡Gracias! – John

+0

De nada. Me alegro de que funcionó. – Mischa

Cuestiones relacionadas