小改造:ajax化will_paginate

Rails 2.0.2以后,原来的分页类paginate没作为基准类了,而是依赖plug in——will paginate。

will_paginate的代码写得不错,不过没支持Ajax,动手改造了一下,哈,效果还行(其实以前paginate的时候已经自己封装了一个方法用于处理ajax分页)。

改动很小,大家不用惊呼,主要改动如下:

/plugins/will_paginate/lib/will_paginate/view_helpers.rb

原代码 82行左右,加入传入参数:ajax_options = nil

def will_paginate(collection = nil, options = {}, ajax_options = nil)

原代码 95 行左右,创建新renderer_class实例,加入以下调用参数

renderer = renderer_class.new collection, options, ajax_options, self

原代码 118 行左右,renderer_class类构建,加入调用参数

def initialize(collection, options, ajax_options, template)

原代码 122 行左右,增减一个实例变量,用于存储传入的ajax_options:

@ajax_options = ajax_options

原代码 187 行左右,是输出页面翻页链接,增加对@ajax_options的判断:

if @ajax_options
  @ajax_options[:url] = url_options(page) if @ajax_options[:url].nil?
  @template.link_to_remote text, @ajax_options
else
  @template.link_to text, url_options(page)
end

源代码 203行左右(因为上面加了几行,所以这里不准确,这里贴整段):

就是 def url_options(page) 这里:
def url_options(page)
  options = { param_name => page }
  # page links should preserve GET parameters
  options = params.merge(options) if @template.request.get?
  options.rec_merge!(@options[:params]) if @options[:params]
  options[:ajax] = true if !options.has_key?(:ajax) and !@ajax_options.nil?
  return options
end

嗯,如何调用呢?

<%= will_paginate @favorites, { :param_name => :fav_page }, { :update => "favorites_list", :method => "get" } %>

什么,这不就和link_remote_to差不多嘛,嗯,差不多就拿去用吧!HuHu~~

PS一下:这个方法还没彻底测试过,需要大家测试测试。



转载于:https://www.cnblogs.com/janpoem/archive/2008/03/05/1090891.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值