Использование Ruby on Rails escape_javascript с jQuery - PullRequest
5 голосов
/ 04 января 2011

Я смотрел на этот Railscast , особенно на эти строки кода.

// 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();

Может ли кто-нибудь объяснить, почему escape_javascript использовался для рендеринга частичного и отображения мгновенного уведомления, но не для функции множественного числа?

Спасибо

Ответы [ 2 ]

4 голосов
/ 04 января 2011

Есть только несколько возможных выходных данных от множественного числа (@ review.product.reviews.count, 'Review')

0 Reviews
1 Review
n Reviews

Нет выходных данных, которые когда-либо нужно будет экранировать, поэтому авторрешил не делать этого.

Выход из javascript изменит <div id="yo">You're Awesome</div> на текст, который не заставит интерпретатор javascript думать, что кавычки заканчивают вашу строковую переменную.

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

Это взорвется.Кавычки должны быть "экранированы" в

&lt;div id=\&quot;yo\&quot;&gt;You\'re Awesome&lt;\/div&gt;
1 голос
/ 04 января 2011

Вы отправляете необработанный ответ javascript обратно в браузер, чего и ожидает команда jQuery.ajax ({type: "script"}).

Чтобы заменить HTML на странице HTML из AJAXответ, он должен быть экранирован, чтобы его можно было отправить как javascript;таким образом использование escape_javascript.

...