2012-06-20 195 views
34

我試圖創建一個基於ajax的評論表單,它會在提交時更新我的​​評論列表。很基本的東西。在js.erb文件中渲染部分

我有有一個<li>標籤基本註釋信息,這裏是我的comments/create.js.erb文件(實際上這三種不同的測試文件合併成一個給你看我的問題是什麼)的部分comments/_single.html.haml

$('#comments ul.comments').append("<%= render :partial => 'comments/single', :locals => { :c => @comment } %>"); 
$('#comments ul.comments').append("<%= render :partial => 'comments/foobar' %>"); 
$('#comments ul.comments').append("foobar"); 
alert('foobar'); 

comments/_foobar.html.haml的內容僅爲foobar,無html內容。 我的問題是,前兩行不起作用。在我的開發服務器控制檯中沒有錯誤,對象檢查員說,評論代碼已正確返回,但它們未添加到我的評論列表中。第三行工作正常,所以第四行。它看起來像使用render有一些問題。

回答

90

當渲染Javascript代碼裏面的諧音,你應該使用escape_javascript方法,像這樣

$('#comments ul.comments').append("<%= escape_javascript render(:partial => 'comments/single', :locals => { :c => @comment }) %>"); 

這種方法別名爲J,所以你也可以做到這一點

$('#comments ul.comments').append("<%= j render(:partial => 'comments/foobar') %>"); 

的方法轉義回車和JavaScript段的單引號和雙引號 ActionView::Helpers::JavaScriptHelper Rails docs

+1

謝謝!人們,不要忘記escape_javacript方法。 – Abel

+0

簡化版本中的局部變量發生了什麼變化 – bobbdelsol