从js.erb模板渲染部分内容会生成带有html标记的残余内容

时间:2011-06-11 19:40:21

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

我从@results渲染show.js.erb时出现问题。输出如下:output from show.js.erb template

show.js.erb

$('#results').empty();
$('#results').html("<ul><%= escape_javascript(render(@results)).html_safe %></ul>");

_result.html.erb

<li>
  <%= link_to(result.title, result.uri) %><br>
  <span class="urls"><%= result.uri %></span>
</li>

_result.html.erb中使用show.html.erb

<ul>
  <%= render @results %>
</ul>

产生正确的输出。

疑似罪魁祸首是<%= escape_javascript(render(@results)).html_safe %>。 我试过<%= raw(escape_javascript(render@results)) %>但没有运气。 应用程序是使用Rails 3.0.8创建的。

修改1:

show.js.erb 的更长版本:

$('#results').empty();
$('#results').html("<ul><%= escape_javascript(render(:partial => "results/result",   :collection => @results)).html_safe %></ul>");

输出与a>li>以及诸如此类的图像保持一致。

编辑2:

show.js.erb呈现的HTML: enter image description here

编辑3:

<a href="http://jasonseifer.com/2010/04/06/rake-tutorial">Rake Tutorial | Jason Seifera&gt;<br>  <span class="urls">http://jasonseifer.com/2010/04/06/rake-tutorialspan&gt;li&gt;</span></a>

编辑4:

没有html_safe

$('#results').empty();
$('#results').html('<ul><%= escape_javascript render(@results) %></ul>');

输出:

output without html_safe

</已经使用了escape_javascript

编辑5:它正在运作!终于来了!

$('#results').html('<%= escape_javascript("<ul>#{render(@results)}</ul>").html_safe %>');

Dogbert的答案是.html('')引号和.html_safe

3 个答案:

答案 0 :(得分:9)

请尝试将此用于js.erb

$('#results').html(<%= escape_javascript "<ul>#{render(@results)}</ul>"%>);

答案 1 :(得分:3)

这里有两个想法:

  1. 失踪;在empty()之后

    $('#results').empty();
    
  2. 我在使用短手渲染方面遇到了麻烦,但长版本始终有效。

    $('#results').html("<ul><%= escape_javascript(render( :partial => "results/result", :collection => @results)).html_safe %></ul>");
    
  3. 接下来尝试

    .html('')

    上将双引号更改为单引号

答案 2 :(得分:1)