javascript – will_paginate页面链接问题

前端之家收集整理的这篇文章主要介绍了javascript – will_paginate页面链接问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前有一个评论模型,在微博下发布,两者都显示在同一页面上.问题是两者都显示在同一页面上,并且两者都是分页的,我试图用facebook方法进行微观测量.以下是以下问题:

两个分页链接变成这个href =“/ users / 2?page = 2”而不是href =“/ users / 2 / micropost?page = 2”或者href =“/ users / 2 / comment?page = 2 ”.我不确定如何解决这个问题.这是我的一些代码.所有建议都非常感谢!

Micropost渲染HTML

  1. <table class="microposts">
  2. <% if microposts.any? %>
  3. <%= render microposts %>
  4. <%= will_paginate microposts,:page_links => false %>
  5. <% else %>
  6. <div class="EmptyContainer"><span class='Empty'>Add a thread!</span></div>
  7. <% end %>
  8. </table>

评论部分HTML

  1. <div id='CommentContainer-<%= micropost.id%>' class='CommentContainer Condensed2'>
  2. <div class='Comment'>
  3. <%= render :partial => "comments/form",:locals => { :micropost => micropost } %>
  4. </div>
  5. <div id='comments'>
  6. <% comments = micropost.comments.paginate(:per_page => 5,:page => params[:page]) %>
  7. <%= render comments %>
  8. <%= will_paginate comments,:class =>"pagination" %>
  9. </div>
  10. </div>

显示页面用户控制器

  1. def show
  2. @user = User.find(params[:id])
  3. @comment = Comment.find(params[:id])
  4. @micropost = Micropost.new
  5. @comment = Comment.new
  6. @comment = @micropost.comments.build(params[:comment])
  7. @comments = @micropost.comments.paginate(:page => params[:page],:per_page => 5)
  8. @microposts = @user.microposts.order('created_at DESC').paginate(:per_page => 10,:page => params[:page])
  9. respond_to do |format|
  10. format.html
  11. format.js
  12. end
  13. end

解决方法

问题在于为每个页面创建URL的will_paginate方式(它与jQuery没有任何关系).

通过设计,will_paginate会尽力猜测页面用户的基本URL是什么(在内部它使用控制器/动作来做到这一点).然后将该基本URL与传递给will_paginate助手的任何额外参数组合使用:params和succesive页码.

目前(will_paginate 3.0.3),为了覆盖此默认行为,您需要编写自定义LinkRenderer类.下面是这样一个类的例子 – 它使用了新的额外选项:base_link_url,可以传递给will_paginate视图助手.然后,在创建分页链接时,将传递的字符串用作基础.如果:未传递base_link_url选项,则它将回退到默认行为.

将以下类放在某个地方,rails可以在加载时找到它(例如/ lib,只要你将/ lib添加到application.rb中的自动加载路径):

  1. # custom_link_renderer.rb
  2. class CustomLinkRenderer < WillPaginate::ActionView::LinkRenderer
  3. def prepare(collection,options,template)
  4. @base_link_url = options.delete :base_link_url
  5. @base_link_url_has_qs = @base_link_url.index('?') != nil if @base_link_url
  6. super
  7. end
  8.  
  9. protected
  10. def url(page)
  11. if @base_link_url.blank?
  12. super
  13. else
  14. @base_url_params ||= begin
  15. merge_optional_params(default_url_params)
  16. end
  17.  
  18. url_params = @base_url_params.dup
  19. add_current_page_param(url_params,page)
  20.  
  21. query_s = []
  22. url_params.each_pair {|key,val| query_s.push("#{key}=#{val}")}
  23.  
  24. if query_s.size > 0
  25. @base_link_url+(@base_link_url_has_qs ? '&' : '?')+query_s.join('&')
  26. else
  27. @base_link_url
  28. end
  29. end
  30. end
  31. end

用法

  1. # in your view
  2. will_paginate collection,:renderer => CustomLinkRenderer,:base_link_url => '/anything/you/want'

现在回到你的案子.到这个时候你可能会看到解决方案 – 你可以在一个页面上有两个带有不同基本URL的will_paginate小部件,为这两个提供不同的:base_link_url选项.

猜你在找的JavaScript相关文章