在js.erb文件中渲染部分

时间:2012-06-20 20:46:33

标签: ruby-on-rails ruby-on-rails-3

我正在尝试创建一个基于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时似乎存在一些问题。

1 个答案:

答案 0 :(得分:106)

在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') %>");
  

方法Escapes回车以及JavaScript段的单引号和双引号    ActionView::Helpers::JavaScriptHelper Rails docs