Ruby on Rails使用jQuery的escape_javascript

时间:2011-01-04 14:06:00

标签: javascript ruby-on-rails railscasts

我一直在关注这个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 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

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