49

我正在尝试创建一个基于 ajax 的评论表单,它会在提交时更新我的​​评论列表。很基本的东西。

我有一个部分comments/_single.html.haml,它有一个<li>带有基本评论信息的标签,这是我的comments/create.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/_foobar.html.haml只是foobar,里面没有html。我的问题是前两行不起作用。我的开发服务器控制台中没有错误,对象检查器说注释代码已正确返回,但它们没有添加到我的注释列表中。第三行工作正常,所以第四行。使用起来似乎有一些问题render

4

1 回答 1

119

在 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

于 2012-06-20T21:30:30.140 回答