でHTMLを生成した場所:レール3 - 部分のエスケープは、私は単純なことをやろうとしていますjavascriptの応答
_flash.js.erb:
$("#alerts").append("<%=j render :template => "shared/_flash.html.erb" %>");
注<% = J ..これはjavascriptをエスケープします。
_flash.html.erb:_flash.js.erbが呼び出されると
<% flash.each do |key, value| %>
<div class="alert-message top <%= "#{key}" %> fade in" data-alert="alert">
<a class="close" href="#">x</a>
<p><%=j value %></p>
</div>
<% end %>
、しかし、次のようなものが追加されます:
$("#alerts").append(" \u003Cdiv class=alert-message top warning fade in data-alert=alert\u003E
\u003Ca class=close href=#\u003Ex\u003C/a\u003E
\u003Cp\u003ELooks like you have already linked with Facebook.\u003C/p\u003E
\u003C/div\u003E
");
JavaScriptをエスケープせず、応答は次のようになります。
$("#alerts").append(" <div class="alert-message top warning fade in" data-alert="alert">
<a class="close" href="#">x</a>
<p>Looks like you have already linked with Facebook.</p>
</div>
");
最初のresp onse、あまりにも多くのものはエスケープされます。 2番目のレスポンスでは、何もエスケープされず、二重引用符は物事を混乱させます。
上記を堅牢な方法で実現するには、どのような方法でレール3をお勧めしますか?
したがって、<%=j .. %>の代わりにescape_javascript(...)を使用すると、望ましい結果が得られることが判明しました。奇妙な - 彼らは同じことだと思った。私はもっと冗長で解決しなければならないと思う。それほど冗長でない方法や、<%=j ... %>を動作させる方法はありますか? – deruse