[英]Rails 5 using will_paginate to create a load more button
所以我试图创建一个更多的加载按钮(不是无限滚动,虽然一些简单的js调整可以使它如此)。 我在Rails 5中使用了will_paginate gem。
它目前全部按预期工作,除非我点击加载更多它加载下一页帖子两次,例如: 加载更多>帖子4,帖子5,帖子6,帖子4,帖子5,帖子6
仅供参考我的'帖子'是@links:
links_controller.erb
def index
@links = Link.order('created_at DESC').paginate(:page => params[:page], :per_page => 3)
respond_to do |format|
format.html
format.js
end
end
视图/链接/ index.html.erb
<div class="link-wrap">
<%= render @links %>
</div>
<% if @links.next_page %>
<div class="link more">
<%= link_to 'Load More', links_path(:page => @links.next_page), :class => 'next_page', :remote => true if @links.next_page %>
</div>
<% end %>
pagination.js.coffee
$ ->
$('.next_page').on 'click', (e) ->
e.preventDefault()
url = $(this).attr('href')
$.getScript(url)
index.js.erb的
$('.link-wrap').append('<%= j render(@links) %>');
<% if @links.next_page %>
$('.next_page').attr('href','<%= links_path(:page => @links.next_page) %>');
<% else %>
$('.more').remove();
<% end %>
对于我的生活,我无法弄清楚为什么当点击“加载更多”时它会两次渲染链接。 这似乎是一件非常简单的事情,但我正在努力。
如果您检查服务器控制台,您实际上可以看到两个请求进入,一个由您的:remote => true
enabled链接触发,另一个来自您的自定义ajax。 实际上你不需要任何js
来完成这项工作。 只需从pagination.js.coffee
删除该click函数,或从链接中删除:remote => true
。 毕竟两个人都在做同样的事情。 希望这会有所帮助。
所以这当然是一个愚蠢的错误。
删除index.html.erb上的行:
:remote => true if @links.next_page
所以现在它看起来像这样:
<div class="link-wrap">
<%= render @links %>
</div>
<% if @links.next_page %>
<div class="link more">
<%= link_to 'Load More', links_path(:page => @links.next_page), :class => 'next_page' %>
</div>
<% end %>
一切正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.