嘿,我正在尝试向 Rails 应用程序添加无休止的滚动...我按照 ryan bates 的教程进行操作,但我仍然在加载下一页内容时遇到了一些麻烦。
所以你得到一个关于我使用的结构的线索......我有一个名为静态页面的控制器,它主要有静态页面加上一些其他非静态页面......其中一个页面被称为“提要”,所以在 static_pages 视图中我有一个 feed.html.erb
这是一个显示用户更新的提要页面
这是控制器(static_pages)
def feed
if signed_in?
@update = current_user.updates.build
@feed_items = current_user.feed.page(params[:page]).per_page(5)
else
flash[:error] = "Please sign in."
redirect_to login_url
end
respond_to do |format|
format.js
format.html
end
end
这是提要 html 视图
<div class="row">
<div class="span8 offset2 settings update">
<div id="feeds">
<%= render partial: "shared/feed_item", collection: @feed_items %>
</div>
<%= will_paginate @feed_items %>
</div>
</div>
这是我的 static_pages.js.coffee(来自 ryan bates)
jQuery ->
if $('.pagination').length
$(window).scroll ->
url = $('.pagination .next_page a').attr('href')
if url && $(window).scrollTop() > $(document).height() - $(window).height() - 50
$('.pagination').text("Fetching more products...")
$.getScript(url)
$(window).scroll()
最后是我的 feed.js.erb(在 static_pages 视图文件夹中)
$('#feeds').append("<%= render partial: 'shared/feed_item', collection: @feed_items %>");
<% if @feed_items.current_page < @feed_items.num_pages %>
$('.pagination').replaceWith('<%= will_paginate(@feed_items) %>');
<% else %>
$('.pagination').remove();
<% end %>
有没有人想尝试一下并试图弄清楚这里发生了什么?我敢肯定这很容易,我没有看到。(顺便说一句,在我开始进行无休止的滚动之前,分页效果很好)
当我尝试访问提要页面并滚动到底部时,会呈现文本(获取更多产品),但新的 feed_items 不会。
编辑为真,除非假
static_pages 咖啡脚本
jQuery ->
if $('.pagination').length
$(window).scroll ->
url = $('.pagination .next_page a').attr('href')
if url && $(window).scrollTop() > $(document).height() - $(window).height() - 5
$('.pagination').text("Hello world!")
$.getScript(url)
$(window).scroll()
feed.html.erb
<div class="row">
<div class="span8 offset2 settings update">
<div id="feeds" data-no-turbolink>
<%= render partial: "shared/feed_item", collection: @feed_items %>
</div>
<%= will_paginate @feed_items %>
</div>
</div>
feed.js.erb
$('#feeds').append("<%= j render partial: 'shared/feed_item', collection: @feed_items %>");
<% if @feed_items.next_page %>
$('.pagination').replaceWith('<%= j will_paginate(@feed_items) %>');
<% else %>
$('.pagination').remove();
<% end %>