2011-07-04 7 views
10

La siguiente línea de código:problemas para insertar unos rieles parciales utilizando jQuery

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

se supone que es un instert parcial como html dentro de la etiqueta div coments_xx. lo que está sucediendo es que el contenido del parcial se inserta pero no se interpreta como html, quiero decir, en lugar de insertar un comentario con su formato correcto que veo todo el código en la página web:

Ejemplo (esto es cómo se inserte en la página web):

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! 

Si yo analizo el código JavaScript insertado me sale algo como esto (he usado la extensión Firebug verla):

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

Finalmente este es el código de el parcial que estoy insertando:

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

Espero que podría explicar bien a mí mismo!

gracias de antemano por su ayuda.

Respuesta

3

Tuve un problema similar hace unos días. Parece que te estás enfrentando a Rails haciendo que la salida de HTML sea segura.

Trate de añadir .html_safe hasta el final de la escape_javascript:

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

No estoy actualmente capaz de verificar, pero si esto es causado por el mismo tipo de problema que el mío era que debería funcionar para usted .

0

Probé la solución de SaucyK y parece que es el camino a seguir, pero aún tengo una salida extraña representada en mi navegador.

Así que ahora la línea de código va (como SaucyK propuesto):

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

Y esto es lo que me pasa ahora en mi navegador:

Posted less than a minute ago 
Deletea> span> 

diego probandob> wrote:p> 

Webpage:b>www.toteria.comp> 

pruebaaaap>div> 

Si miro en el código html definitiva generada por los carriles y jQuery me sale esto:

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

y el comentario que escribí fue

diego probando wrote: 

Webpage:www.toteria.com 

pruebaaaa 

Cuando actualizo la página web (por lo que el comentario se introduce a través de los rieles y no a través de Javascript) todo está bien.

Como puede ver al principio, el código se interpreta correctamente, pero luego hay algunos lugares en los que, en lugar de obtener un 'Obtengo > o en lugar de obtener, obtengo b >.

¿Se puede relacionar con el método escape_javascript ?? Entiendo que es necesario de todos modos si no quiero que javascript intente interpretar mi código Ruby ...

¡El código del parcial que estoy insertando sigue siendo el mismo que en la primera publicación !.

Gracias por su respuesta, lo siento, tengo que responder este por qué, pero no estaba registrado en stackoverflow cuando escribí la pregunta.

6

¡He encontrado la solución! Solo tengo el código de carriles dentro de # {}:

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

Todavía obtengo un método de representación no definido cuando sigo esta sugerencia. Mi ejemplo es bastante similar. ¿Tendría una idea de lo que me podría estar perdiendo? La única diferencia entre tu respuesta aquí y la que tengo es el modelo y los nombres parciales. –

+0

Además, la razón por la que estoy probando este método es porque tengo una lista de parciales que creo usando un ruby ​​incrustado en cada ciclo en los elementos actuales. Mi objetivo es agregar un objeto recién creado al enviarlo a la lista actual sin volver a cargar la página. ¿Sabes si hay una forma de actualizar ese rubí en particular en cada ciclo? Eso probablemente requeriría una llamada ajax, pero pensé que sería fácil hacer algo como esto: '$ (" # activeTab "). Append (" <% = escape_javascript ("# {render: partial => 'groups/thing) -list-row ',: locals => {: t => Thing.order (: created_at) .last}} ")%>"); ' –

+0

Para referencia futura de personas que encuentran este hilo buscando respuestas: una razón común para obtener un "método indefinido" en el renderizado es que está usando renderizar en un archivo dentro/assets en lugar de app/views. – Steve

Cuestiones relacionadas