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_javascriptyapar. 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!