2012-06-20 26 views
34

投稿時にコメントリストを更新するajaxベースのコメントフォームを作成しようとしています。かなり基本的なもの。js.erbファイルのレンダリング部分

$('#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/create.js.erbファイルを(実際にはこれらの3つの異なるテストファイルは、私の問題が何であるかを示すために一つに合併)の基本的なコメント情報を持つ単一 <li>のタグを持っており、ここにある部分 comments/_single.html.hamlを持っています

comments/_foobar.html.hamlのコンテンツはちょうどfoobarで、内部にはHTMLがありません。 私の問題は、最初の2行が機能しないことです。私のdevサーバーコンソールにエラーはありません、オブジェクトインスペクタは、コメントコードが正しく返されたが、私のコメントリストに追加されていないと言います。 3行目はうまく動作し、4行目はうまく動作します。 renderを使用していくつかの問題があるようです。

答えて

90

JavaScriptコード内のパーシャルをレンダリングするとき、あなたはまた、この

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

行うことができますので、この方法は、Jとしてエイリアスされるので

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

のように、escape_javascriptメソッドを使用する必要がありますメソッドキャリッジリターンとJavaScriptセグメントの一重引用符と二重引用符をエスケープします ActionView::Helpers::JavaScriptHelper Rails docs

+1

ありがとう!人々は、escape_javacriptメソッドを忘れないでください。 – Abel

+0

簡易版のローカル変数に何が起こったか – bobbdelsol

関連する問題