子在川上曰

  逝者如斯夫不舍昼夜
随笔 - 71, 文章 - 0, 评论 - 915, 引用 - 0
数据加载中……

rails中使用ajax时的分页实现

关于分页可以参考这篇文章:http://ruby-lang.org.cn/forums/viewthread.php?tid=206&extra=page%3D1&page=2

但如果使用ajax则分页的实现需要改动一下,如下所示。

      共<b><%=@article_pages.page_count%></b>页:&nbsp;

      
<%=if @article_pages.current!=@article_pages.first_page
         link_to_remote(
"首页",:update => "articleList",
            :url 
=> {:action => 'list',:subcategory_id => @subcategory.id,:page => @article_pages.first_page})
      
else
      
"首页"
      end
%>

      
<%=if @article_pages.current.previous
      link_to_remote(
"上一页",:update => "articleList",
          :url 
=> {:action => 'list',:subcategory_id => @subcategory.id,:page => @article_pages.current.previous})
      
else
      
"上一页"
      end 
-%>



      
<%=pagination_links_each(@article_pages, :window_size => 5do | page |
      link_to_remote(
"[#{page}]", :update => "articleList",
                           :url 
=> {:action => 'list',:subcategory_id => @subcategory.id,:page => page}) 
      end
%>

      
<%=if @article_pages.current.next
      link_to_remote(
"下一页",:update => "articleList",
                :url 
=> {:action => 'list',:subcategory_id => @subcategory.id,:page => @article_pages.current.next})
      
else
      
"下一页"
      end 
-%>

      
<%=if @article_pages.current!=@article_pages.last_page
      link_to_remote(
"末页",:update => "articleList",
      :url 
=> {:action => 'list',:subcategory_id => @subcategory.id,:page => @article_pages.last_page})
      
else
      
"末页"
      end
%>


然后再优化一下,把这些代码提取成一个公共函数,放在application_helper里,以便其他页面也能共享。代码如下:

  def ajax_pagination_links(pages,update,url)
    links 
= []
    links 
<< "共<b>#{pages.page_count}</b>页"
    
return links[0if pages.page_count==1
    links 
<< ":&nbsp;"

    
if pages.current!=pages.first_page
      url[:page] 
= pages.first_page
      links 
<< link_to_remote("首页", :update => update, :url => url)
    
else
      links 
<< "首页"
    end
 
    
if pages.current.previous
      url[:page] 
= pages.current.previous
      links 
<< link_to_remote("上一页", :update => update, :url => url)
    
else
      links 
<< "上一页"
    end

    links 
<< pagination_links_each(pages, :window_size => 5do |page|
                url[:page] 
= page
                link_to_remote(
"[#{page}]", :update => update, :url => url) 
            end

    
if pages.current.next
      url[:page] 
= pages.current.next
      links 
<< link_to_remote("下一页",:update => update, :url => url)
    
else
      links 
<< "下一页"
    end

    
if pages.current!=pages.last_page
      url[:page] 
= pages.last_page
      links 
<< link_to_remote("末页",:update => update, :url => url)
    
else
      links 
<< "末页"
    end
    
    links.join(
" ")
  end

以后在页面里只需要加上这样一句即可
     <%=ajax_pagination_links(@article_pages, "articleList", {:action => 'list',:subcategory_id => @subcategory.id})%>

posted on 2007-07-30 17:53 陈刚 阅读(1612) 评论(4)  编辑  收藏 所属分类: Rails&Ruby

评论

# re: rails中使用ajax时的分页实现  回复  更多评论   

cool.

非常好的一个实现, 谢谢你伟大的工作.
2007-12-25 10:08 | sixfooter

# re: rails中使用ajax时的分页实现[未登录]  回复  更多评论   

干的漂亮,谢谢分享。
2007-12-27 22:37 | daiiing

# re: rails中使用ajax时的分页实现  回复  更多评论   

为什么不能用啊,我用
<%=ajax_pagination_links(@paper_pages, "contrast_paper_list", {:action => 'paper_contrast'})%>,生成的页面如下(末页):

<a onclick="new Ajax.Updater('contrast_paper_list', '/paper/paper_contrast?page=2', {asynchronous:true, evalScripts:true}); return false;" href="#">末页</a>
但是我看是连接到http://localhost:3001/paper/paper_contrast#这页面的,我是把分页的那一块做成一个partail,我不知道action是不是就跟普通的pagination的写法一样啊。
2008-02-29 11:12 | magiclin

# re: rails中使用ajax时的分页实现  回复  更多评论   

:subcategory_id => @subcategory.id有什么用啊,想不通
2008-02-29 11:24 | magiclin

只有注册用户登录后才能发表评论。


网站导航: