Рендеринг частичного из шаблона js.erb производит контент с остатками HTML-тегов - PullRequest
3 голосов
/ 11 июня 2011

У меня проблема с рендерингом @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:

HTML отображается как show.js.erb: 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 %>');

Это ответ Догберта с .html('') цитатами и .html_safe.

Ответы [ 3 ]

9 голосов
/ 12 июня 2011

Пожалуйста, попробуйте использовать это для вашего js.erb

$('#results').html(<%= escape_javascript "<ul>#{render(@results)}</ul>"%>);
3 голосов
/ 12 июня 2011

Две идеи здесь:

  1. Отсутствует;после empty ()

    $('#results').empty();
    
  2. У меня были проблемы с использованием рендеринга с короткими руками, но длинная версия всегда работает.

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

Следующая попытка

Измените двойные кавычки на одинарные на .html('')

1 голос
/ 12 июня 2011

https://github.com/rails/rails/issues/1553 Попробуйте это с Rails 3.0.7?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...