2011-01-04 20 views
5

He estado mirando esto Railscast, específicamente estas líneas de código.Ruby on Rails uso de escape_javascript 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(); 

Podría alguien explicar por qué escape_javascript se ha utilizado para la prestación de un parcial, y mostrando un aviso de flash, pero no para la función pluralizar?

Gracias

Respuesta

4

Hay eligieron sólo un par de salidas posibles de pluralizar (@ review.product.reviews.count, 'Revisión')

0 Reviews 
1 Review 
n Reviews 

No hay salida de dicho alguna vez necesitará ser escapado, por lo que el escritor no hacerlo

Escapar javascript cambiará <div id="yo">You're Awesome</div> en texto que no hará que el intérprete de javascript crea que las comillas terminan su variable de cadena.

Si se va a escribir en

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

Sería volar. Las citas deben ser "escapadas" en

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

Está enviando prima Javascript respuesta de vuelta al navegador, que es lo que jQuery.ajax ({tipo: "escritura"}) espera de comando.

Para reemplazar el HTML en una página con HTML de la respuesta AJAX, necesita ser escapado para que pueda ser enviado como javascript; por lo tanto, el uso de escape_javascript.

+0

Gracias Teddy, pero eso realmente no responde mi pregunta. – pingu