5

我一直在看这个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 来渲染部分内容和显示 flash 通知,而不是用于复数函数吗?

谢谢

4

2 回答 2

4

复数(@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;
于 2011-01-04T14:58:21.370 回答
1

您正在将原始 javascript 响应发送回浏览器,这是 jQuery.ajax({type:"script"}) 命令所期望的。

为了将页面中的 HTML 替换为来自 AJAX 响应的 HTML,需要对其进行转义,以便可以将其作为 javascript 发送;因此使用了 escape_javascript。

于 2011-01-04T14:08:25.480 回答