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が部分的なレンダリングとフラッシュ通知の表示に使用されたが、複数化機能には使用されなかった理由を説明できますか?

ありがとう

4

2 に答える 2

4

複数化(@ review.product.reviews.count、'レビュー')からの可能な出力は2つだけです。

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 に答える