当前位置:编程学习 > JS >>

[Ext JS 4] Grid 实战之分页功能

前言
分页功能的实现有两种途径:

一种是服务端分页方式, 也就是web客户端传递页码参数给服务端,服务端根据页面参数返回指定条数的数据。也就是要多少取多少。这种方式比较适合Grid  的数据量很大,需分批取。

另一种是客户端分页方式, 一次性从服务端取回所有的数据在客户端这边实现分页。这种自然适合数据量较少的状况,减少和服务端的交互, 对性能有一些帮助。这种方式还有一种好处就是对于初学Ext JS Grid 或分页功能比较简单和直观了。

Ext 目前的官方文档中,对于客户端分页的方式介绍和实例不多,而服务端的方式,跟具体的服务端的技术相关,Ext 也就没做太多的介绍了。

本篇先介绍分页实现的思想,然后从客户端的实现方式介绍开始,毕竟测试起来简单一些;最后介绍服务端的方式。

 


分页的效果:

 

 

 \
 


Grid Panel 分页实现思想
要在Grid上实现分页功能,

首先要给这个Grid Panel 添加一个 Ext.PagingToolbar

添加的方式可以使用 bbar 的config 添加到button bar

也可以使用dockedItems 的 config 添加

类似:


[javascript]
bbar: Ext.create('Ext.PagingToolbar',{ 
            store: store, 
            displayInfo: true, 
            displayMsg: 'Displaying topics {0} - {1} of {2}', 
            emptyMsg: "No topics to display", 
          } 
         ), 

bbar: Ext.create('Ext.PagingToolbar',{
      store: store,
      displayInfo: true,
            displayMsg: 'Displaying topics {0} - {1} of {2}',
            emptyMsg: "No topics to display",
          }
         ),

或是:


[javascript]
dockedItems: [{ 
            xtype: 'paging易做图', 
            store: store,   // same store GridPanel is using  
            dock: 'bottom', 
            displayInfo: true 
        }] 

dockedItems: [{
         xtype: 'paging易做图',
         store: store,   // same store GridPanel is using
         dock: 'bottom',
         displayInfo: true
     }]
使用Ext.create 或是直接在 [] config 都可以。

接下来就是这个store 的处理了。page 的store和一般的store 会有一些差别的地方,下面会介绍到。

 

 

客户端分页方式(local data)
Ext JS 中将客户端的分页也叫“local data‘ 的分页。

在Ext JS 的官方文档中有提到关于PageingStore这样一篇介绍

Ext.ux.data.PagingStore .

这种方式通过添加一些新的Class 的方式实现。而且这个扩展包是针对Ext js 3.x 来实现的, 需要下载扩展包。

而这篇介绍里的下载link 有需要权限。总之, 有点麻烦。

在Ext JS 4的新版本中,完全可以不用这种方式。

Ext JS API 中有以下这个Class, 用它构造的store 就可以实现分页效果了。


Ext.ux.data.PagingMemoryProxy   proxy: pagingmemory

需要特别注意的是 Ext 的导入包中ext-all.js 并没包含这个类, 看上去这个是作为扩展包。

所以使用前需要导入这个包的 定义js 文件,或是使用Ext 的动态载入方式导入。

 


直接看例子:

 

[javascript]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
 
<script type="text/javascript" src="../lib/extjs/ext-all.js"></script> 
<script type="text/javascript" src="../lib/extjs/ux/data/PagingMemoryProxy.js"></script> 
 
<link rel="stylesheet" type="text/css" href="../lib/extjs/resources/ext-theme-neptune/ext-theme-neptune-all.css" /> 
 
<script type="text/javascript"> 
 
Ext.onReady(function(){ 
     
    var itemsPerPage = 4; 
    var store = Ext.create('Ext.data.Store', { 
        fields:['name', 'email', 'phone'], 
        pageSize: itemsPerPage, 
        proxy: { 
            type: 'pagingmemory', 
            data: [ 
                                    { 'name': 'ALisa',  "email":"lisa@simpsons.com",  "phone":"555-111-1224"  }, 
                                    { 'name': 'Bart',  "email":"bart@simpsons.com",  "phone":"555-222-1234" }, 
                                    { 'name': 'Homer', "email":"home@simpsons.com",  "phone":"555-222-1244"  }, 
                                    { 'name': 'Marge', "email":"marge@simpsons.com", "phone":"555-222-1254"  }, 
                                    { 'name': 'Lisa',  "email":"lisa@simpsons.com",  "phone":"555-111-1224"  }, 
                                    { 'name': 'Bart',  "email":"bart@simpsons.com",  "phone":&qu

补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,