2011-07-04 9 views
10

La seguente riga di codice:problemi nell'inserimento di un rotaie parziali utilizzando jQuery

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

dovrebbe instert un parziale come HTML all'interno del tag div coments_xx. quello che succede è che il contenuto del partial è inserito ma non interpretato come html, cioè, invece di inserire un commento con il suo giusto formato vedo l'intero codice nella pagina web:

Esempio (questo è come esso inserirlo nel sito):

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! 

Se ho analizzare il codice javascript inserito ottengo qualcosa di simile (ho usato l'estensione firebug per vederlo):

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

Infine questo è il codice di il parziale che sto inserendo:

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

Spero di potermi spiegare bene!

grazie in anticipo per il vostro aiuto.

risposta

3

Ho avuto un problema simile qualche giorno fa. Sembra che tu stia scappando di Rails rendendo l'output HTML sicuro.

Prova ad aggiungere .html_safe alla fine del escape_javascript:

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

non sono attualmente in grado di controllare, ma se questo è causato dallo stesso tipo di problema che la mia era dovrebbe funzionare per voi .

0

Ho provato la soluzione di SaucyK e sembra la strada da percorrere, ma ho ancora un output strano reso nel mio browser.

Così ora la riga di codice va (come SaucyK proposto):

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

E questo è ciò che ottengo ora nel mio browser:

Posted less than a minute ago 
Deletea> span> 

diego probandob> wrote:p> 

Webpage:b>www.toteria.comp> 

pruebaaaap>div> 

Se mi guardo il codice html finale generato da rotaie e Jquery ottengo questo:

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

e il commento che ho scritto era

diego probando wrote: 

Webpage:www.toteria.com 

pruebaaaa 

Quando aggiorno la pagina Web (quindi l'annuncio è introdotto tramite rotaie e non tramite Javascript) tutto va bene.

Quindi come potete vedere all'inizio il codice è interpretato in modo rigoroso ma poi ci sono alcuni posti in cui invece di ottenere un 'I get > o invece ottengo ottengo b >.

Può essere correlato con il metodo escape_javascript ?? capisco che è necessario comunque se non voglio javascript per provare a interpretare il mio codice rubino ..

Il codice del partial che sto inserendo è sempre lo stesso del primo post !.

Grazie per la risposta, mi dispiace dover rispondere perché, ma non ero registrato in StackOverflow quando ho scritto la domanda.

6

Ho trovato la soluzione !! Solo il codice delle rotaie in # {}:

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

Sto ancora ottenendo un rendering di un metodo non definito quando seguo questo suggerimento. Il mio esempio è abbastanza simile. Avresti un'idea di cosa potrei mancare? L'unica differenza tra la tua risposta qui e quello che ho è il modello e nomi parziali. –

+0

Inoltre, il motivo per cui sto provando questo metodo è perché ho un elenco di partial che creo usando un ruby ​​incorporato ogni loop sugli elementi correnti. Il mio obiettivo è quello di aggiungere un oggetto appena creato alla submission alla lista corrente senza ricaricare la pagina. Sai se c'è un modo per aggiornare quel particolare rubino ogni ciclo? Probabilmente richiederebbe una chiamata ajax, ma ho pensato che sarebbe stato facile fare qualcosa del genere: '$ (" # activeTab "). Append (" <% = escape_javascript ("# {render: partial => 'groups/thing -list-row ',: locals => {: t => Thing.order (: created_at) .last}} ")%>"); ' –

+0

Per riferimenti futuri di persone che trovano questo thread alla ricerca di risposte: un motivo comune per ottenere "il metodo non definito" sul rendering è che stai utilizzando il rendering in un file all'interno di/assets piuttosto che in app/viste. – Steve

Problemi correlati