|
|
两种方法
一,
@@pagination_options = { :class => 'pagination', :prev_label => '上一页', :next_label => '下一页', :inner_window => 4, # links around the current page :outer_window => 1, # links around beginning and end :separator => ' ', # single space is friendly to spiders and non-graphic browsers :param_name => :page, #add by chengang :update =>nil, #ajax所要更新的html元素的id :url_suffix => '' #url的后缀,主要是为了补全REST所需要的url #add end } mattr_reader :pagination_options # => will_paginate Ajax效果扩展Helper方法 def will_paginate_remote(entries = @entries, options = {}) total_pages = entries.total_pages if total_pages > 1 options = options.symbolize_keys.reverse_merge(pagination_options) page, param = entries.current_page, options.delete(:param_name) inner_window, outer_window = options.delete(:inner_window).to_i, options.delete(:outer_window).to_i #add by chengang update = options.delete(:update) suffix = options.delete(:url_suffix) url = request.env['PATH_INFO'] url += suffix if suffix #add end min = page - inner_window max = page + inner_window if max > total_pages then min -= max - total_pages elsif min < 1 then max += 1 - min end current = min..max beginning = 1..(1 + outer_window) tail = (total_pages - outer_window)..total_pages visible = [beginning, current, tail].map(&:to_a).flatten.sort.uniq links, prev = [], 0 visible.each do |n| next if n < 1 break if n > total_pages unless n - prev > 1 prev = n #change by chengang text = (n==page ? n : "[#{n}]") links << page_link_remote_or_span((n != page ? n : nil), 'current', text, param, update, url) else prev = n - 1 links << '...' redo end end #change by chengang links.unshift page_link_remote_or_span(entries.previous_page, 'disabled', options.delete(:prev_label), param, update, url) links.push page_link_remote_or_span(entries.next_page, 'disabled', options.delete(:next_label), param, update, url) #change end content_tag :div, links.join(options.delete(:separator)), options end end
<%= will_paginate_remote @task_logs, :update => 'task_logs_list', :url_suffix => nil %>
二,
<%= will_paginate @task_logs, { :renderer => 'WillPaginate::LinkRenderer', :update => 'task_logs_list', :url => task_url(@task), :create => '', :complete => ''}%>
class AjaxLinkRenderer < WillPaginate::LinkRenderer def page_link_or_span(page, span_class = 'current', text = nil) text ||= page.to_s if page and page != current_page @template.link_to_remote text, :url=>url_options(page),:update=>@options[:update] else @template.content_tag :span, text, :class => span_class end endend |
|