2012-01-21 20 views
0

我試圖做一個簡單的事情HTML其中:軌道3 - 逃逸局部的產生在javascript響應

_flash.js.erb:

$("#alerts").append("<%=j render :template => "shared/_flash.html.erb" %>"); 

注意<%= j的.. 。它逃脫了javascript。

_flash.html.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 %> 

當_flash.js.erb被調用,但是,像附加以下內容:

$("#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> 
"); 

在第一個響應onse,太多東西都逃脫了。在第二個迴應中,沒有任何東西可以逃脫,雙引號使事情變得糟糕。

在rails 3中推薦的方式是以強大的方式實現上述目標?

+0

因此事實證明,使用escape_javascript(...)而不是<%=j .. %>可以產生所需的結果。奇怪 - 認爲他們是同一件事。我想我必須要更加詳細地解決。任何較少的冗長選擇或使<%=j ... %>工作的方法? – deruse

回答

3

改爲使用escape_javascript;你是JSON-escaping吧。

您可以以相同的方式別名jjson_escape的別名;它只是一個幫手。

+0

有人需要修復這些文檔--http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript – deruse