【问题标题】:Rendering partial in js.erb file在 js.erb 文件中渲染部分
【发布时间】:2012-06-20 20:46:32
【问题描述】:

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

我有一个部分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。 我的问题是前两行不起作用。我的开发服务器控制台中没有错误,对象检查器说注释代码已正确返回,但它们没有添加到我的 cmets 列表中。第三行工作正常,所以第四行。使用render似乎有一些问题。

【问题讨论】:

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


    【解决方案1】:

    当在 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

    【讨论】:

    • 谢谢!各位,别忘了 escape_javacript 方法。
    • 简化版中局部变量发生了什么
    猜你喜欢
    • 2012-07-29
    • 1970-01-01
    • 2023-03-11
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多