SORU
25 EKİM 2009, Pazar


Neden bir kısmi işleme önce escape_javascript?

this Railscast episode bakarak escape_javascript çağrısı burada tabi neden ben merak ediyorum

$("#reviews").append("<%= escape_javascript(render(:partial => @review)) %>");

escape_javascript ne amaçla kullanılıyor?

23* *göre:

escape_javascript(javascript)

Taşıyıcı döndürür kaçış ve tek ve JavaScript parçaları için, çift tırnak işaretleri.

Ama bu benim için pek bir anlamı yok.

CEVAP
26 EKİM 2009, PAZARTESİ


Daha kolay eğer iki parça kod bölmek iyi anlaşılır.

İlk Bölüm $("#reviews").append("<%= ... %>"); erb ile javascript. Bu <%= ... %> ruby kod içinde döndürdükleri değiştirilmesi anlamına gelir. Bu değiştirme sonucu geçerli javascript, aksi takdirde müşteri işlemeye çalıştığında bir hata atılır olmalıdır. İlk şey şu: sana ihtiyacım vargeçerli bir javascript.

Dikkate almak başka bir şey ruby oluşturur ne olursa olsun çift tırnak ile bir javascript dize içinde bulunmalıdır - <%= ... %> çift tırnak işaretleri içine dikkat edin. Bu oluşturulan javascript şöyle gelir:

$("#reviews").append("...");

Şimdi <%= ... %> iç ruby kısmını inceleyelim. render(:partial => @review) ne yapar? Kodu herhangi bir işleme olabilir anlamına gelir - - kısmi bir html, css ... hatta daha çok javascript render!

Eğer bizim kısmi bazı basit html bunun gibi varsa ne olur?

<a href="/mycontroller/myaction">Action!</a> 

Javascript bir parametre olarak çift tırnak içinde dize aldığını hatırlıyor musun? Eğer biz sadece kısmi kod ile <%= ... %> değiştirirseniz, o zaman bir sorunumuz var - hemen href= sonra çift tırnak var! Javascript geçerli olmayacaktır:

// Without escaping, you get a broken javascript string at href
$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");

Bunun gerçekleşebilmesi için değil, seni istiyorumkaçışsenin ipin kesilmemesi için bu özel karakterler yerine bu oluşturur bir şeye ihtiyacın var:

<a href=\"/mycontroller/myaction\">Action!</a>

Bu ne escape_javascript. Dize döndürdü "" javascript. kırmayacak emin olur Eğer kullanıyorsanız, istenen çıktıyı alırsınız:

$("#reviews").append("<a href=\"/mycontroller/myaction\">Action!</a>")

Saygılar!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • Ordetta Price

    Ordetta Pric

    12 EYLÜL 2011
  • vgeller1

    vgeller1

    22 Kasım 2009