Проблема вставки частичных рельсов с помощью JQuery - PullRequest
12 голосов
/ 04 июля 2011

Следующая строка кода:

$("#comments_<%=@comment.post.id %>").append("<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }) %>");

Предполагается вставить частичное в виде html внутри тега div coments_xx.то, что происходит, - то, что содержание частичного вставлено, но не интерпретируется как html, я имею в виду, вместо того, чтобы вставить комментарий с его правильным форматом, я вижу весь код на веб-странице:

Пример (этокак это вставить его в веб-страницу):

1 Comment
<div id=comment_5_34> <span class=dateandoptions> Posted less than a minute ago<br/> 
<a href=/comments/34/5 data-method=post data-remote=true rel=nofollow>Deletea> span>
<p><b>otra pruebab> wrote:p> <br/> <p><b> Webpage:b>asss.comp> <br/> <p class=comment-body>heeyeyeyyhep>div>

Thanks for commenting!

Если я анализирую вставленный код JavaScript, я получаю что-то вроде этого (я использовал расширение firebug, чтобы увидеть его):

/* Add the new comment to the bottom of the comments list */
$("#comments_5").append("&lt;div id=comment_5_34&gt;    &lt;span    class=dateandoptions&gt;        Posted less than a minute ago&lt;br/&gt;        &lt;a href=/comments/34/5 data-method=post data-remote=true rel=nofollow&gt;Deletea&gt;    span&gt;    &lt;p&gt;&lt;b&gt;otra pruebab&gt; wrote:p&gt;    &lt;br/&gt;     &lt;p&gt;&lt;b&gt; Webpage:b&gt;asss.comp&gt;     &lt;br/&gt;    &lt;p class=comment-body&gt;heeyeyeyyhep&gt;div&gt;"); 

Наконецэто код партиала, который я вставляю:

<div id="comment_<%=comment.post.id%>_<%=comment.id%>">
<span class="dateandoptions">
    Posted <%= time_ago_in_words(comment.created_at) %> ago<br/>
    <%= link_to 'Delete', {:controller => 'comments', :action => 'eliminar', :id => comment.id, :post_id => comment.post.id}, :method => :post, :remote => true %>
</span>
<p><b><%= comment.user_name %></b> wrote:</p>
<br/>
<% if comment.web_page != nil %> <p><b> Webpage:</b><%= comment.web_page %></p> <% end %>
<br/>
<%= content_tag(:p, comment.contenido, :class => "comment-body") %>
</div> 

Надеюсь, я смогу хорошо объяснить себя!

Заранее спасибо за вашу помощь.

Ответы [ 3 ]

6 голосов
/ 05 июля 2011

Я нашел решение !!Просто код рельсов внутри # {}:

$("#comments_<%=@comment.post.id %>").append("<%= escape_javascript("#{render :partial => 'posts/comment', :locals => { :comment => @comment }}").html_safe %>");
3 голосов
/ 04 июля 2011

У меня была похожая проблема несколько дней назад.Похоже, вы столкнулись с тем, что Rails делает вывод HTML безопасным.

Попробуйте добавить .html_safe в конец escape_javascript:

<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }).html_safe %>

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

0 голосов
/ 04 июля 2011

Я попробовал решение SaucyK , и кажется, что это путь, но все же у меня в браузере отображается странный вывод.

Так что теперь строка кода идет (какПредложение SaucyK):

$("#comments_<%=@comment.post.id %>").append("<%= escape_javascript(render :partial => 'posts/comment', :locals => { :comment => @comment }).html_safe %>");

И вот что я сейчас получаю в своем браузере:

Posted less than a minute ago
Deletea> span>

diego probandob> wrote:p>

Webpage:b>www.toteria.comp>

pruebaaaap>div>

Если я посмотрю окончательный HTML-код, сгенерированный rails и Jquery, я получу следующее:

<div style="" id="comment_5_40">   
<span class="dateandoptions">        Posted less than a minute ago<br>        <a href="/comments/40/5" data-method="post" data-remote="true" rel="nofollow">Deletea&gt;    span&gt;    <p><b>diego probandob&gt; wrote:p&gt;    <br>     </b></p><p><b><b> Webpage:b&gt;www.toteria.comp&gt;     <br>    </b></b></p><p class="comment-body"><b><b>pruebaaaap&gt;div&gt;</b></b></p></a></span></div></div>

и комментарий, который я написал, был

diego probando wrote:

Webpage:www.toteria.com

pruebaaaa

Когда я обновляю веб-страницу (поэтому комментарий вводится через рельсы, а не через Javascript), все в порядке.

Итак, как вы можете видеть в начале, код интерпретируется как правильный, но затем есть некоторые места, где вместо получения 'я получаю> или вместо получения я получаю b>.

Может ли это быть связано сметод escape_javascript ??Я понимаю, что в любом случае это необходимо, если я не хочу, чтобы javascript пытался интерпретировать мой код ruby.

Код партиала, который я вставляю, все тот же, что и в первом посте!.

Спасибо за ваш ответ, извините, я должен ответить на этот вопрос почему, но я не был зарегистрирован в stackoverflow, когда писал вопрос.

...