我一直在关注这个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用于渲染局部,并显示闪光通知,但不能用于复数函数吗?
由于
答案 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>";
它会爆炸。引号需要“转义”到
<div id=\"yo\">You\'re Awesome<\/div>
答案 1 :(得分:1)
您正在将原始javascript响应发送回浏览器,这是jQuery.ajax({type:“script”})命令所期望的。
为了使用来自AJAX响应的HTML替换页面中的HTML,需要对其进行转义以便将其作为javascript发送;因此使用了escape_javascript。