2011-07-04 14 views
10

następujący wiersz kodu:Kłopoty wstawianie szyn częściowych jQuery

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

ma instert częściowy jako html wewnątrz znacznika coments_xx div. co się dzieje, to że zawartość częściowej jest wstawiana, ale nie interpretowana jako html, to znaczy, zamiast wstawiania komentarza z właściwym formatem widzę cały kod na stronie:

Przykład (w ten sposób to włóż ją w internetowej):

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! 

Gdybym ANALIZE kod javascript włożona i dostać coś takiego (użyłem rozszerzenie firebug go zobaczyć):

/* 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;"); 

Wreszcie jest to kod częściowe, które wstawiam:

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

Mam nadzieję, że potrafię dobrze się wytłumaczyć!

z góry dzięki za pomoc.

Odpowiedz

3

Miałem podobny problem kilka dni temu. Wygląda na to, że używasz Railsów, co sprawia, że ​​wyjście HTML jest bezpieczne.

spróbuj dodać .html_safe do końca escape_javascript:

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

Nie jestem obecnie w stanie sprawdzić, ale jeżeli jest to spowodowane przez ten sam rodzaj problemu, że kopalnia została powinien pracować dla Ciebie .

0

Próbowałem rozwiązanie SaucyK i wydaje się, że droga, ale nadal mam dziwne dane wyjściowe renderowane w mojej przeglądarce.

Więc teraz linia kodu idzie (jak zaproponowano SaucyK):

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

I to jest to, co ja się teraz w mojej przeglądarce:

Posted less than a minute ago 
Deletea> span> 

diego probandob> wrote:p> 

Webpage:b>www.toteria.comp> 

pruebaaaap>div> 

Jeśli patrzę w końcowym kodu html generowany przez szyny i jQuery uzyskać to:

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

i komentarz napisałem było

diego probando wrote: 

Webpage:www.toteria.com 

pruebaaaa 

Po odświeżeniu strony (tak, że commment wprowadzany jest przez szyny, a nie przez Javascript), wszystko jest w porządku.

Tak jak widać na początku, kod jest interpretowany jako poprawny, ale są pewne miejsca, w których zamiast uzyskać "Dostaję > lub zamiast dostaję b >.

Czy można to powiązać z metodą escape_javascript ?? Rozumiem, że jest to konieczne, jeśli nie chcę, aby javascript próbował interpretować mój kod ruby.

Kod wstawiania częściowego jest wciąż taki sam jak w pierwszym poście !.

Dzięki za odpowiedź, przepraszam muszę odpowiedzieć, dlaczego, ale nie zostałem zarejestrowany w stackoverflow, gdy napisałem pytanie.

6

Znalazłem rozwiązanie !! Po prostu posiadanie kodu szyn wewnątrz # {}:

$("#comments_<%[email protected] %>").append("<%= escape_javascript("#{render :partial => 'posts/comment', :locals => { :comment => @comment }}").html_safe %>"); 
+1

Ciągle otrzymuję niezdefiniowaną metodę renderowania, gdy postępuję zgodnie z tą sugestią. Mój przykład jest bardzo podobny. Czy masz pojęcie, czego może mi brakować? Jedyną różnicą między twoją odpowiedzią a tym, co mam, jest model i częściowe nazwy. –

+0

Powodem, dla którego próbuję tej metody jest to, że mam listę częściowych, które tworzę za pomocą wbudowanego ruby ​​w każdej pętli na bieżących elementach. Moim celem jest dołączenie nowo utworzonego obiektu po przesłaniu go do bieżącej listy bez ponownego ładowania strony. Czy wiesz, czy istnieje sposób na odświeżenie tego konkretnego rubinu w każdej pętli? To prawdopodobnie wymagałoby wywołania ajax, ale pomyślałem, że łatwo będzie zrobić coś takiego: '$ (" # activeTab "). Append (" <% = escape_javascript ("# {render: partial => 'groups/thing -list-row ',: locals => {: t => Thing.order (: created_at) .last}} ")%>"); ' –

+0

Aby w przyszłości znaleźć ludzi szukających tego wątku w poszukiwaniu odpowiedzi: jeden typowy powód uzyskanie "nieokreślonej metody" renderowania oznacza, że ​​używasz renderowania w pliku wewnątrz/zasobach zamiast aplikacji/widoków. – Steve