首先让我声明,这是一个使用很多其他人的代码的实例,并且没有完全理解正在发生的事情以及如何解决我的问题。
我使用 will_paginate 跟随 Railscast 进行无限滚动,并且工作正常。
我每页加载 12 个项目,每个项目都有自己的部分。每个项目都是一个对象,用户可以通过单击“竖起大拇指”按钮来“喜欢”。
我对这个按钮进行了 ajax 化,并为“喜欢”的项目重新加载了部分内容。
这适用于项目 1-12(第一页)。
当用户单击通过无限滚动加载的项目上的竖起大拇指按钮时,ajax 调用会执行,但不会再次找到该对象,并且部分只是变为空白。
这是我的代码-
#@messages partial
<div class="span3 well" style="height:360px;" id="message-<%=message.id%>">
<div class="thumbnail">
<%= image_tag message.gif.url %>
<div class="caption">
<h5><%=link_to message.sender, "/profile/#{User.find_by_username(message.sender).id}"%></h5>
<h5><%=message.chain.subject %></h5>
<p><em>"<%= message.content %>"</em></p>
<p><a href="/upvote/<%=message.id%>" data-remote="true" class="btn btn-success"><%=message.up_votes%>
<i class="icon-thumbs-up"></i> Nice Work</a>
</div>
</div>
</div>
# js.coffee (from railscast)
jQuery ->
$(window).scroll ->
url = $('.pagination .next_page').attr('href')
if url && $(window).scrollTop() > $(document).height() - $(window).height() - 50
$('.pagination').text('Loading more gifs...')
$.getScript(url)
# vote.js -- js executed by ajax call
$("#message-<%=params[:id]%>").load(location.href+" #message-<%=params[:id]%>>*", "");
我很确定问题出在 vote.js 中。.load(location.href+" #message-<%=params[:id]%>>*", "");
似乎无法在第 2、第 3、第 4 等页面上找到对象,因为它使用作为location.href
当前 url 的仅提供前 12 个对象的对象。我想我需要以某种方式将页面放在那个 url 中,但我不知道如何做到这一点。
编辑 - 或者,也许我应该为所有未分页的消息设置一个端点,并调用该 url 而不是location.href +
?