3

我在 Rails 3 中使用 Twitter 引导弹出窗口。
当我最初加载页面(显示操作)时,弹出窗口正常工作。

我的部分(一个叫另一个)看起来像这样:

<span class="solution_votes_stat" id="<%= 'solution_votes_stat_' + sid.to_s %>">
   <%= render :partial => 'solutions/popover', :locals => {:s => s} %>
</span>

_popover.html.erb 看起来像这样:

<% sid = s.id %>
<% solution_vote_up_count = s.solution_votes.votes_up.count %>

<% all_users_who_voted_up(sid) %>
<span class = "popover-with-html" rel = "popover"  
      data-original-title = "Who likes this" 
      data-content = "<%= render :partial => 'solutions/users_who_voted_up', :locals => {:users_who_voted_up => @users_who_voted_up} %>" 
      id="<%= 'solution_' + sid.to_s + '_up_votes' %>">
  <%= solution_vote_up_count %> 
</span>
<%= solution_vote_up_count==1 ? "Advisor" : "Advisors" %>

这会产生这样的 HTML:

<span class="solution_votes_stat" id="solution_votes_stat_1">
    <span class = "popover-with-html" rel = "popover"  
          data-original-title = "Who likes this" 
          data-content = "<ul><li>Admin</li></ul>" 
          id="solution_1_up_votes">1 
    </span>
       Advisor
</span>

到目前为止,一切都很好 => 一切正常。
问题是当我尝试用 jQuery 更新它时。

在我的 up_votes.js.erb 中,我有:

update_popover = ('<%= escape_javascript(render(:partial => "solutions/popover", :locals => {:s => @solution}))%>');
$('<%= "#solution_votes_stat_"+@solution.id.to_s %>').html(update_popover);

作为测试,我点击了反对票,然后点击了赞成票。当我查看生成的 HTML 时,它看起来与上面的完全一样,只是它现在对于这个 div 不起作用(没有弹出窗口);弹出框仍在处理所有其他 div(使用相同的 HTML)。

关于正在发生的事情以及如何解决这个问题的任何想法?



更新:看起来它正在缓存它。我点击了投票来查看 div HTML 是什么,在 Chrome 开发人员中,HTML 是正确的(0 票等),但是当我查看页面源时,它没有改变(1 票等)。仍然不确定该怎么做......我想直接使用jQuery来修改数据/属性而不是渲染部分?仍然......为什么即使使用缓存数据,弹出框也不再工作?

4

1 回答 1

6

有没有想过给自己一个快速的踢?:) 好的,我想通了。在我的solutions.js.coffee(在资产文件夹中)中,我有这个jQuery在加载文档时触发它:

$('.popover-with-html').popover({ html: true })

当我将此行添加到下面我更新数据的 up_votes.js.erb 文件中时,它会重新加载数据并正确显示。呃 - 一整天都被烧毁了 - 但我想你有时会这样学习。:|

于 2012-07-24T08:45:05.067 回答