2011-01-04 20 views
5

Ho cercato questo Railscast, in particolare queste righe di codice.Ruby on Rails escape_javascript utilizzo con jQuery

// views/reviews/create.js.erb 
$("#new_review").before('<div id="flash_notice"><%= escape_javascript(flash.delete(:notice)) %></div>'); 
$("#reviews_count").html("<%= pluralize(@review.product.reviews.count, 'Review') %>"); 
$("#reviews").append("<%= escape_javascript(render(:partial => @review)) %>"); 
$("#new_review")[0].reset(); 

qualcuno potrebbe spiegare il motivo per cui escape_javascript è stato utilizzato per il rendering parziale, e la visualizzazione di un avviso di flash, ma non per la funzione pluralize?

Grazie

risposta

4

Ci sono solo un paio di possibili uscite da pluralize (@ review.product.reviews.count, 'Review')

0 Reviews 
1 Review 
n Reviews 

Nessuna uscita di che avrebbe mai bisogno di essere sfuggito, così lo scrittore ha scelto non farlo.

Escaping javascript cambierà <div id="yo">You're Awesome</div> in un testo che non farà in modo che l'interprete javascript pensi che le virgolette finiscano con la variabile stringa.

Se si dovesse digitare

var awesome = "<div id="yo">You're Awesome</div>"; 

Sarebbe saltare in aria. Le virgolette devono essere "scappate" in

&lt;div id=\&quot;yo\&quot;&gt;You\'re Awesome&lt;\/div&gt; 
1

Stai inviando prime javascript risposta al browser, che è ciò che jQuery.ajax ({type: "script"}) si aspetta di comando.

Per sostituire l'HTML in una pagina con HTML dalla risposta AJAX, è necessario eseguire l'escape in modo che possa essere inviato come javascript; quindi l'uso di escape_javascript.

+0

Grazie Teddy, ma questo non risponde alla mia domanda. – pingu