【问题标题】:Trouble inserting a rails partial using JQuery使用 JQuery 插入 Rails 部分时遇到问题
【发布时间】:2011-09-28 04:03:22
【问题描述】:

以下代码行:

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

应该在comments_xx div 标记内插入部分html。 发生的事情是部分内容被插入但没有被解释为 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> 

希望我能解释清楚!

提前感谢您的帮助。

【问题讨论】:

    标签: javascript jquery ruby-on-rails append partials


    【解决方案1】:

    我找到了解决办法!!只需在 #{ } 中包含 rails 代码:

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

    【讨论】:

    • 当我遵循这个建议时,我仍然得到一个未定义的方法渲染。我的例子非常相似。你知道我可能会错过什么吗?您在这里的答案与我所拥有的唯一不同的是模型和部分名称。
    • 另外,我尝试这种方法的原因是因为我有一个部分列表,我使用嵌入的 ruby​​ 每个循环在当前项目上创建。我的目标是在提交到当前列表时附加一个新创建的对象而不重新加载页面。你知道是否有办法在每个循环中刷新那个特定的红宝石?这可能需要一个 ajax 调用,但我认为这样做很容易:$("#activeTab").append("&lt;%= escape_javascript("#{render :partial =&gt; 'groups/thing-list-row', :locals =&gt; {:t =&gt; Thing.order(:created_at).last}}") %&gt;");
    • 供人们查找此线程以寻找答案的未来参考:在渲染中获取“未定义方法”的一个常见原因是您在 /assets 内的文件中使用渲染,而不是在应用程序/视图中使用渲染。
    【解决方案2】:

    几天前我遇到了类似的问题。看起来你正在与确保 HTML 输出安全的 Rails 发生冲突。

    尝试将 .html_safe 添加到 escape_javascript 的末尾:

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

    我目前无法检查,但如果这是由与我相同的问题引起的,它应该适合你。

    【讨论】:

      【解决方案3】:

      我尝试了 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>
      

      如果我查看由 rails 和 Jquery 生成的最终 html 代码,我会得到:

      <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
      

      当我刷新网页时(因此评论是通过 rails 而不是通过 Javascript 引入的)一切都很好。

      因此,正如您在开始时看到的那样,代码被正确解释,但在某些地方,而不是得到一个 ' 我得到 > 或而不是得到我得到 b>。

      它可以与方法 escape_javascript 相关吗?我明白,如果我不想让 javascript 尝试解释我的 ruby​​ 代码,无论如何都是有必要的..

      我插入的部分代码还是和第一篇一样!

      感谢您的回答,对不起,我必须回答这个原因,但我在写问题时没有在 stackoverflow 中注册。

      【讨论】:

        猜你喜欢
        • 2017-01-04
        • 1970-01-01
        • 2012-03-14
        • 2018-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        相关资源
        最近更新 更多