Kodu ikiye bölerseniz anlamak daha kolay.
İlk bölüm $("#reviews").append("<%= ... %>");
, erb içeren javascript. Bu, <%= ... %>
içindeki ruby kodunun döndürdüğü şeyle değiştirileceği anlamına gelir . Bu değiştirmenin sonucu geçerli bir javascript olmalıdır, aksi takdirde istemci bunu işlemeye çalıştığında bir hata verir. İlk şey bu: geçerli bir javascript'e ihtiyacınız var .
Dikkate alınması gereken başka bir şey de Ruby'nin ürettiği her şeyin çift tırnaklı bir javascript dizgesinin içinde bulunması gerektiğidir - <%= ... %>
. Bu, oluşturulan javascript'in şöyle görüneceği anlamına gelir:
$("#reviews").append("...");
Şimdi de içindeki yakut kısmını inceleyelim <%= ... %>
. Nedirrender(:partial => @review)
? Bu, kısmi bir işlem yapıyor - yani her tür kodu - html, css ... veya hatta daha fazla javascript - işliyor olabilir!
Öyleyse, kısmımız bunun gibi bazı basit html içeriyorsa ne olur?
<a href="/mycontroller/myaction">Action!</a>
JavaScript'inizin parametre olarak çift tırnaklı bir dizge aldığını hatırlıyor musunuz? Basitçe <%= ... %>
bu kısmın kodunu değiştirirsek , o zaman bir sorunla karşılaşırız - href=
çift tırnaktan hemen sonra ! JavaScript geçerli olmayacak:
// Without escaping, you get a broken javascript string at href
$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");
Bunun olmaması için, bu özel karakterlerden kaçmak istersiniz, böylece dizeniz kesilmez - bunun yerine bunu üreten bir şeye ihtiyacınız vardır:
<a href=\"/mycontroller/myaction\">Action!</a>
Bu ne escape_javascript
yapar. Döndürülen dizenin javascript'i "kırmamasını" sağlar. Kullanırsanız, istediğiniz çıktıyı alırsınız:
$("#reviews").append("<a href=\"/mycontroller/myaction\">Action!</a>")
Saygılarımızla!