2011-01-04 33 views
5

Tôi đã xem số Railscast, cụ thể là các dòng mã này.Ruby on Rails escape_javascript cách sử dụng với 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(); 

Có thể ai đó giải thích tại sao escape_javascript đã được sử dụng để hiển thị một phần, và hiển thị một thông báo flash, nhưng không phải cho các chức năng pluralize?

Cảm ơn

Trả lời

4

Có chỉ có một vài kết quả đầu ra có thể từ pluralize (@ review.product.reviews.count, 'Xem lại')

0 Reviews 
1 Review 
n Reviews 

Không đầu ra điều đó sẽ không bao giờ cần phải được thoát, vì vậy tác giả đã chọn không làm như vậy.

javascript thoát sẽ thay đổi <div id="yo">You're Awesome</div> thành văn bản sẽ không khiến trình thông dịch javascript nghĩ rằng dấu ngoặc kép kết thúc biến chuỗi của bạn.

Nếu bạn đã gõ vào

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

Nó sẽ nổ tung. Dấu ngoặc kép cần phải được "thoát" thành

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

Bạn đang gửi thô javascript phản ứng trở lại trình duyệt, đó là những gì jQuery.ajax ({type: "kịch bản"}) lệnh hy vọng.

Để thay thế HTML trong trang có HTML từ phản hồi AJAX, nó cần phải được thoát để nó có thể được gửi dưới dạng javascript; do đó việc sử dụng escape_javascript.

+0

Cảm ơn Teddy, nhưng điều đó không thực sự trả lời câu hỏi của tôi. – pingu