`

让will_paginate的分页支持ajax

阅读更多

让will_paginate的分页支持ajax

关于will_paginate插件,请看这个帖子: http://mmm.iteye.com/blog/116931。
文/陈刚 (www.chengang.com.cn)
但一直搜不到它支持ajax分面的方法 ,于是我参考它分页方法的源代码(位于:vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb),稍微改写,变成了一个支持ajax的分页方法。以下代码复制到application_helper里即可。

<!---->
  
#-----------------------------------------
  # 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

  def will_paginate_remote(entries 
= @entries, options = {})
    total_pages 
= entries.page_count

    
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
  
protected

  def page_link_remote_or_span(page
, span_class, text, param, update, url)
    unless page
      content_tag 
:span, text, :class => span_class
    
else
      link_to_remote text
, :update => update, :url => "#{url}?#{param.to_sym}=#{page}", :method=>:get
    
end
  
end


在view中的使用如下所示:
<!---->          <%=will_paginate_remote @topics, :update => 'topicList', :url_suffix => url_suffix%>
分享到:
评论

相关推荐

    will_paginate分页插件

    **will_paginate分页插件详解** 在Web开发中,数据分页是一项常见的需求,它可以帮助用户更有效地浏览大量信息,提高用户体验。Rails框架中,`will_paginate`是一个非常流行且强大的分页插件,它简洁易用,功能强大...

    will_paginate 2.2.2

    `will_paginate`支持国际化,可以方便地调整分页文字。 五、兼容性与更新 尽管2.2.2是较老的版本,但`will_paginate`一直保持更新,以适应Rails的新版本。如果你的项目还在使用这个版本,可能需要考虑升级到更现代...

    will_paginate-bootstrap, 将 Twitter Bootstrap 分页组件与will_paginate集成.zip

    will_paginate-bootstrap, 将 Twitter Bootstrap 分页组件与will_paginate集成 will_paginate-bootstrap不再维护我不再使用 Bootstrap 来使用 Rails,所以不幸的是,我不再接受请求请求或者维护这个库。 为了发布你...

    will_paginate插件下载

    3. 分页查询优化:will_paginate支持链式查询,可以在`paginate`之前加入其他查询条件,提高查询效率。 4. 国际化:will_paginate支持多语言,可以轻松切换不同语言环境下的分页文本。 四、will_paginate与...

    scaffolding+will_paginate+提供will_paginate下载

    而`will_paginate`则是一个非常流行的分页库,它与`scaffolding`结合使用,能够为你的Rails应用添加优雅的分页功能。 `will_paginate`库由Matias Berezin创建,它的设计简洁且易于使用。它不仅提供了分页的基本功能...

    will_paginate 2.1.0

    6. **国际化支持**:`will_paginate` 支持多种语言,包括中文,可以通过配置文件来切换不同的语言环境,提供本地化的分页提示。 7. **自定义渲染**:`will_paginate` 提供了自定义分页链接渲染的功能,你可以根据...

    will_paginate v2.3.11

    《will_paginate v2.3.11:Rails分页插件详解》 在Web开发中,处理大量的数据是常见的需求,特别是在使用Ruby on Rails框架时。为了优化用户体验,提高页面加载速度,分页功能显得尤为重要。这时,will_paginate...

    will_paginate:用于Rails,Sinatra,Merb,DataMapper等的分页库

    will_paginate will_paginate是一个分页库,与Ruby on Rails,Sinatra,Hanami :: View,Merb,DataMapper和Sequel集成。 安装: ## Gemfile for Rails 3+, Sinatra, and Merbgem 'will_paginate' , '~&gt; 3.1.0' 有关...

    will_paginate_endless_scroll_example:如何使用 will_paginate gem 创建无限滚动的演示

    cd will_paginate_endless_scroll_example 安装依赖: bundle install 迁移和种子数据库: bundle exec rake db:migrate db:seed 就是这样,它准备好了。 跑步: 像普通的 rails 应用程序一样运行: rails s ...

    will_paginate-bootstrap4:钩入will_paginate以格式化html以匹配Twitter Bootstrap 4样式

    gem 'will_paginate-bootstrap4' 用法 &lt;&#37;= will_paginate @clients, renderer: WillPaginate::ActionView::BootstrapLinkRenderer %&gt; 以下选项可用(除了will_paginate中可用的选项之外): :list_classes ...

    jQuery paginate分页导航插件ajax分页代码

    在本篇文章中,我们将深入探讨如何使用jQuery paginate插件来实现ajax分页。 首先,让我们了解jQuery paginate插件的基本概念。该插件提供了一种灵活的方式来创建美观且功能强大的分页导航。它支持自定义样式和多种...

    WillPaginateExample:Ruby on Rails的Will_Paginate示例

    `Will_Paginate` 是一个非常流行的Ruby on Rails插件,用于处理大型数据集的分页。它提供了简洁、灵活的API,使得在Rails应用中实现数据库查询结果的分页变得简单易行。在本篇文章中,我们将深入探讨`Will_Paginate`...

    rails 2.0.2 分页 需另外下载插件

    在Ruby on Rails框架中,`Rails 2.0.2`是一个较早的版本,而分页功能在那个时期并不像现在的Rails应用那样内置在框架内。...通过理解并熟练运用will_paginate,你可以让你的Rails应用的分页功能更加完善。

    ruby on rails 常用插件下载

    此外,`will_paginate` 还支持 AJAX 效果,以便无刷新地切换页面。通过使用 `remote: true` 参数,可以轻松实现这一功能: ```erb &lt;%= will_paginate @posts, remote: true %&gt; ``` 在对应的 JavaScript 文件中,你...

    ruby will_paginate的用法

    新版本的will_paginate已经抛弃了这样的做法,转而使用gem的方式,本文通过建立一个名为foobar的应用来了解一下will_paginate的用法。 ============================== C:\&gt;rails foobar -d mysql C:\&gt;cd foobar C:\...

    Ruby-willpaginate一个分页库可与RubyonRailsSinatraMerbDataMapper和Sequel集成

    Ruby-on-Rails、Sinatra、Merb、DataMapper 和 Sequel 这些都是 Ruby 开发领域中的关键组件,而 `will_paginate` 是一个在这些框架中广泛使用的分页库。它提供了简单、灵活的接口,帮助开发者在处理大量数据时进行...

    resume 用Ruby技术实现的search 分页的例子

    Rails提供了`will_paginate`或`kaminari`这样的插件来简化分页实现。以`will_paginate`为例,首先添加到Gemfile并安装: ```ruby gem 'will_paginate' gem 'will_paginate-bootstrap' # 如果你想使用Bootstrap样式 ...

    jquery.paginate ajax分页

    `jQuery.paginate` 是一个基于 jQuery 的插件,专门用于实现 AJAX 分页功能,它允许用户在不刷新整个页面的情况下加载更多内容。这个插件简化了前端与后端的数据交互,提升了用户体验。 ### 1. jQuery 和 AJAX ...

Global site tag (gtag.js) - Google Analytics