2011-08-29 8 views
6

Voglio rendere un partial nel mio file js.erb così posso usare l'HTML generato nel mio Javascript. Ecco un codice per servire da esempio.Rendering parziale all'interno di js.erb. È possibile ottenere una stringa raw in modo da poter eliminare gli spazi bianchi?

create.js.erb

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

_pretty_box.html.haml

.pretty_box_container 
    .title 
    Something Pretty 

Quando create.js.erb è reso, ottengo il seguente:

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

Come ci si aspetterebbe, questo rompe il mio javascript. Ho bisogno di togliere gli spazi bianchi dal risultato del rendering parziale. Il problema è che il valore di ritorno di render è un oggetto ActiveSupport::SafeBuffer che sostituisce tutti i metodi "non sicuri" (vedere UNSAFE_STRING_METHODS), incluso strip. Quindi chiamare render(:partial => pretty_box ).strip HTML: codifica l'intera stringa.

Ho provato tutti i tipi di combinazioni utilizzando i metodi html_safe o to_s. Non funzionano perché restituiscono self e l'utilizzo di raw non funziona perché chiama to_s.html.safe.

So che posso aggiungere i caratteri > e < al mio HAML, ma non voglio farlo per ogni riga di ogni parziale.

risposta

8

Il problema non sono gli spazi bianchi, ma le virgolette.

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

Prova questo:

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

Partenza this answer su StackOverflow per una spiegazione su escape_javascript.

+0

Grazie mischa. Ci proverò stasera. – John

+0

lavorato. Grazie! – John

+0

Prego. Sono contento che ha funzionato. – Mischa