will_paginate ajax

两种方法
一,

@@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
end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值