`
angie_hawk7
  • 浏览: 48465 次
  • 性别: Icon_minigender_1
  • 来自: 乌托邦
社区版块
存档分类
最新评论

EXT前台分页

阅读更多
PagingMemoryProxy 收藏

前因:

项目需要,快速DEMO,采用EXT组件,想在纯HTML+JS的环境下给客户展示分页效果

后果:

example、API都没有找到,想组合Array Grid 和 Paging两个示例,达不到目的...

GG、BAIDU,找到 高手提供 示例链接:http://ido.nl.eu.org/ext-pagingmemoryproxy/

EXT论坛相关帖子:http://extjs.com/forum/showthread.php?p=56759

恩,要学好E文啊!自勉!

附高手扩展的data.proxy的代码:
js 代码

   1. /* 
   2.  * Ext JS Library 1.1 
   3.  * Copyright(c) 2006-2007, Ext JS, LLC. 
   4.  * licensing@extjs.com 
   5.  *  
   6.  * http://www.extjs.com/license 
   7.  */ 
   8.    
   9. /** 
  10.   * Ext.ux.data.PagingMemoryProxy.js 
  11.   * 
  12.   * A proxy for local / in-browser data structures 
  13.   * supports paging / sorting / filtering / etc 
  14.   * 
  15.   * @file   Ext.ux.PagingMemoryProxy.js 
  16.   * @author Ing. Ido Sebastiaan Bas van Oostveen 
  17.   *  
  18.   * @changelog: 
  19.   * @version    1.3 
  20.   * @date       30-September-2007 
  21.   *             - added customFilter config option 
  22.   * @version    1.2  
  23.   * @date   29-September-2007 
  24.   *     - fixed several sorting bugs 
  25.   * @version    1.1 
  26.   * @date   30-August-2007 
  27.   * @version    1.0 
  28.   * @date   22-August-2007 
  29.   * 
  30.   */ 
  31.  
  32. Ext.namespace("Ext.ux");  
  33. Ext.namespace("Ext.ux.data");  
  34.  
  35. /* Fix for Opera, which does not seem to include the map function on Array's */ 
  36. if(!Array.prototype.map){  
  37.     Array.prototype.map = function(fun){  
  38.     var len = this.length;  
  39.     if(typeof fun != "function"){  
  40.         throw new TypeError();  
  41.     }  
  42.     var res = new Array(len);  
  43.     var thisp = arguments[1];  
  44.     for(var i = 0; i < len; i++){  
  45.         if(i in this){  
  46.         res[i] = fun.call(thisp, this[i], i, this);  
  47.         }  
  48.     }  
  49.         return res;  
  50.      };  
  51. }  
  52.  
  53. /* Paging Memory Proxy, allows to use paging grid with in memory dataset */ 
  54. Ext.ux.data.PagingMemoryProxy = function(data, config) {  
  55.     Ext.ux.data.PagingMemoryProxy.superclass.constructor.call(this);  
  56.     this.data = data;  
  57.     Ext.apply(this, config);  
  58. };  
  59.  
  60. Ext.extend(Ext.ux.data.PagingMemoryProxy, Ext.data.MemoryProxy, {  
  61.     customFilter: null,  
  62.       
  63.     load : function(params, reader, callback, scope, arg) {  
  64.         params = params || {};  
  65.         var result;  
  66.         try {  
  67.             result = reader.readRecords(this.data);  
  68.         } catch(e) {  
  69.             this.fireEvent("loadexception", this, arg, null, e);  
  70.             callback.call(scope, null, arg, false);  
  71.             return;  
  72.         }  
  73.           
  74.         // filtering  
  75.         if (this.customFilter!=null) {  
  76.             result.records = result.records.filter(this.customFilter);  
  77.             result.totalRecords = result.records.length;  
  78.         } else if (params.filter!==undefined) {  
  79.             result.records = result.records.filter(function(el){  
  80.                 if (typeof(el)=="object"){  
  81.                     var att = params.filterCol || 0;  
  82.                     return String(el.data[att]).match(params.filter)?true:false;  
  83.                 } else {  
  84.                     return String(el).match(params.filter)?true:false;  
  85.                 }  
  86.             });  
  87.             result.totalRecords = result.records.length;  
  88.         }  
  89.           
  90.         // sorting  
  91.         if (params.sort!==undefined) {  
  92.             // use integer as params.sort to specify column, since arrays are not named  
  93.             // params.sort=0; would also match a array without columns  
  94.             var dir = String(params.dir).toUpperCase() == "DESC" ? -1 : 1;  
  95.                 var fn = function(r1, r2){  
  96.                 return r1==r2 ? 0 : r1
  97.                 };  
  98.             var st = reader.recordType.getField(params.sort).sortType;  
  99.             result.records.sort(function(a, b) {  
100.                 var v = 0;  
101.                 if (typeof(a)=="object"){  
102.                     v = fn(st(a.data[params.sort]), st(b.data[params.sort])) * dir;  
103.                 } else {  
104.                     v = fn(a, b) * dir;  
105.                 }  
106.                 if (v==0) {  
107.                     v = (a.index < b.index ? -1 : 1);  
108.                 }  
109.                 return v;  
110.             });  
111.         }  
112.  
113.         // paging (use undefined cause start can also be 0 (thus false))  
114.         if (params.start!==undefined && params.limit!==undefined) {  
115.             result.records = result.records.slice(params.start, params.start+params.limit);  
116.         }  
117.           
118.         callback.call(scope, result, arg, true);  
119.     }  
120. });  
121.    

应用示例代码:
js 代码

   1. var Example = {  
   2.     init : function(){  
   3.         // some data yanked off the web  
   4.         var myData = [  
   5.             ['3m Co',71.72,0.02,0.03,'9/1 12:00am'],  
   6.             ['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am'],  
   7.             ['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am'],  
   8.             ['American Express Company',52.55,0.01,0.02,'9/1 12:00am'],  
   9.             ['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am'],  
  10.             ['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am'],  
  11.             ['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am'],  
  12.             ['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am'],  
  13.             ['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am'],  
  14.             ['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am'],  
  15.             ['Walt Disney Company (The) (Holding Company)',29.89,0.24,0.81,'9/1 12:00am']  
  16.         ];  
  17.  
  18.         var ds = new Ext.data.Store({  
  19.                 proxy: new Ext.ux.data.PagingMemoryProxy(myData),  
  20.                 reader: new Ext.data.ArrayReader({}, [  
  21.                        {name: 'company'},  
  22.                        {name: 'price', type: 'float'},  
  23.                        {name: 'change', type: 'float'},  
  24.                        {name: 'pctChange', type: 'float'},  
  25.                        {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}  
  26.                   ])  
  27.         });  
  28.         ds.load();  
  29.  
  30.         // example of custom renderer function  
  31.         function italic(value){  
  32.             return '' + value + '';  
  33.         }  
  34.  
  35.         // example of custom renderer function  
  36.         function change(val){  
  37.             if(val > 0){  
  38.                 return '"color:green;">' + val + '';  
  39.             }else if(val < 0){  
  40.                 return '"color:red;">' + val + '';  
  41.             }  
  42.             return val;  
  43.         }  
  44.         // example of custom renderer function  
  45.         function pctChange(val){  
  46.             if(val > 0){  
  47.                 return '"color:green;">' + val + '%';  
  48.             }else if(val < 0){  
  49.                 return '"color:red;">' + val + '%';  
  50.             }  
  51.             return val;  
  52.         }  
  53.  
  54.         // the DefaultColumnModel expects this blob to define columns. It can be extended to provide  
  55.         // custom or reusable ColumnModels  
  56.         var colModel = new Ext.grid.ColumnModel([  
  57.             {id:'company',header: "Company", width: 160, sortable: true, locked:false, dataIndex: 'company'},  
  58.             {header: "Price", width: 75, sortable: true, renderer: Ext.util.Format.usMoney, dataIndex: 'price'},  
  59.             {header: "Change", width: 75, sortable: true, renderer: change, dataIndex: 'change'},  
  60.             {header: "% Change", width: 75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'},  
  61.             {header: "Last Updated", width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}  
  62.         ]);  
  63.  
  64.  
  65.         // create the Grid  
  66.         var grid = new Ext.grid.Grid('grid-example', {  
  67.             ds: ds,  
  68.             cm: colModel,  
  69.             autoExpandColumn: 'company',  
  70.             selModel: new Ext.grid.RowSelectionModel({singleSelect:true}),  
  71.             enableColLock:false,  
  72.             enableDragDrop:false,  
  73.             loadMask: true 
  74.         });  
  75.           
  76.         var layout = Ext.BorderLayout.create({  
  77.             center: {  
  78.                 margins:{left:3,top:3,right:3,bottom:3},  
  79.                 panels: [new Ext.GridPanel(grid)]  
  80.             }  
  81.         }, 'grid-panel');  
  82.  
  83.         grid.render();  
  84.  
  85.  
  86.         var gridFooter = grid.getView().getFooterPanel(true);  
  87.         var paging = new Ext.PagingToolbar(gridFooter, ds, {  
  88.                         pageSize: 5,  
  89.                         displayInfo: true,  
  90.                         displayMsg: '当前记录 {0} - {1} ,共 {2}',  
  91.                         emptyMsg: "No queues to display" 
  92.                     });  
  93.         ds.load({params:{start:0, limit:5}});  
  94.           
  95.           
  96.     }  
  97. };  
  98. Ext.onReady(Example.init, Example); 

附:

在EXT2.0里,已经不支持 grid.getView().getFooterPanel(true) 啦。直接作为bbr定义在Ext.grid.GridPanel里。
分享到:
评论

相关推荐

    Ext前台分页(页面分页)

    实现前台分页的扩展文件(来源于网络) 博文链接:https://simplehumn.iteye.com/blog/552702

    Ext前台分页

    本篇文章将详细讲解基于Ext JS框架实现前台分页的原理和方法。 首先,理解“前台分页”概念。前台分页指的是在客户端,即用户的浏览器端进行数据的分页处理,而不是在服务器端。这种方式的优点是减少了服务器的负载...

    Ext实现分页查询,前台

    本示例主要介绍了如何使用Ext.js这个JavaScript框架来实现前端的分页查询功能。 首先,创建一个名为`resource`的数据存储(Store),它负责从服务器获取数据。这里的`Store`对象定义了字段(fields)、数据源URL...

    extjs前台分页插件PagingStore!

    ExtJS的PagingStore是其框架中用于实现前端分页功能的...以上就是关于ExtJS前台分页插件PagingStore的基本概念和使用方法。通过合理地使用PagingStore,可以有效地管理大量的数据展示,提升Web应用的性能和用户体验。

    用ext写的前台源码 有说明文档

    在这个"用ext写的前台源码 有说明文档"的压缩包中,你将找到使用ExtJS框架开发的前端代码,以及相关的JSON数据处理。 在ExtJS中,你可以使用各种组件如表格、面板、表单、树形结构等来构建复杂的UI。这些组件都封装...

    Extjs4前台前台grid导出excel

    它能够动态加载数据,提供排序、过滤、分页等功能,并且可以自定义列样式和行为。在ExtJS4中,我们可能有以下场景:用户在Grid中查看数据,然后希望将这些数据导出到Excel以便进一步分析或处理。 要实现这个功能,...

    SSH框架+Ext技术做前台显示的客户关系管理系统T86.rar

    同时,Ext的Ext Grid组件能够灵活地展示大量数据,支持分页、排序、过滤等功能,极大地提升了用户体验。 在客户关系管理系统T86中,SSH框架可能被用于后端服务的搭建。Spring管理业务逻辑和服务接口,通过AOP实现...

    Ext 开发指南 学习资料

    2.7.5. 谣言说ext不支持前台排序 2.8. 爱生活,EditorGrid。 2.8.1. 旋动舞步,看我们怎么把这个EditorGrid炫出来。 2.8.2. 添加一行,再把它踢掉 2.8.3. 一切就绪,你可以按保存按钮了。 2.8.4. 天马行空,保证提交...

    Ext.Net.dll

    3. **高效的数据处理**:Ext.Net.Utilities.dll 提供的工具类可以帮助优化数据处理,例如在服务器端进行数据过滤、排序和分页,减轻前端的计算负担。 4. **事件处理**:Ext.Net支持C#事件驱动编程模型,开发者可以...

    JSP+ext+人力资源管理系统

    3. **EXT Grid**:EXT Grid是EXT中的核心组件,用于展示数据表格,支持排序、筛选、分页等功能,非常适合人力资源管理中的数据展示需求。 4. **EXT Form**:用于创建各种表单,如员工信息录入、请假申请等,与后端...

    Ext 中实现Excel导出

    这涉及到从前台界面设计到后端数据处理的多个环节。下面将依次介绍相关知识点。 ### 一、Ext简介 Ext是一个用于构建交互式Web应用程序的JavaScript框架。它提供了丰富的UI组件和强大的数据管理功能,支持多种...

    一个基于ext的ajax小例子

    前台是jsp加上ext的框架。 后台是hibernate-annotations和spring以及dwr的组合。 顺便演示了一下用servlet来返回json数据给ext框架的方式。 &lt;br&gt;在grid的演示部分,包括了分页的数据调用和如何处理来自...

    ext.net GridView 实例详解

    在EXT.NET框架中,GridView结合了灵活性和高效性,提供了一系列高级功能,如分页、排序、过滤、选择等。本文将深入解析EXT.NET GridView的使用方法,包括前台和后台的代码实现,并着重关注一些关键细节。 首先,...

    Ext 操作数据库,对数据的增删改查,包括数据库,Ajax请求和store请求的设置

    Store的请求方式多样,包括简单加载(load)、远程排序和过滤(remoteSort和remoteFilter)、分页(paging)等。Store可以配置不同的proxy类型,如AjaxProxy或MemoryProxy,以适应不同的数据获取策略。 对于初学者...

    精通JS脚本之ExtJS框架.part1.rar

    9.2.4 实现前台分页效果 9.3 可编辑表格控件——EditorGrid 9.3.1 制作第一个EditorGrid 9.3.2 添加一行数据 9.3.3 保存修改结果 9.3.4 验证EditGrid中的数据 9.3.5 限制输入数据的类型 9.4 PropertyGrid属性...

    Ext + struts2 + mysql

    一个Ext3 + struts2 + mysql的程序,...代码大概有3000行,功能包括基本的增删改查、头像上传、分页、拦截器等功能,还用ext做了部分前台,有拒不刷新,三级两栋菜单等。这个用来做毕业设计绰绰有余,程序和数据库完整

    深入浅出ExtJS第2版

    3.9.4 让EXT支持前台排序 52 3.10 后台排序 53 3.11 可编辑表格控件--EditorGrid 55 3.11.1 制作一个简单的EditorGrid 55 3.11.2 添加一行数据 56 3.11.3 保存修改结果 58 3.11.4 验证EditGrid中的数据 59 ...

    MySQL,DWR,JSON,EXT 实现EditorGrid

    使用EXT的EditorGrid,实现前台页面对数据直接进行增删改查操作。用户的友好性较好,已经实现分页功能。例子中使用了DWR和JSON.含MySQL数据库脚本,并已加入Log4j日志记录。本例详细讲解可以参见:...

    精通JS脚本之ExtJS框架.part2.rar

    9.2.4 实现前台分页效果 9.3 可编辑表格控件——EditorGrid 9.3.1 制作第一个EditorGrid 9.3.2 添加一行数据 9.3.3 保存修改结果 9.3.4 验证EditGrid中的数据 9.3.5 限制输入数据的类型 9.4 PropertyGrid属性...

    Extjs4中的分页应用结合前后台

    EXTJS4使用`Ext.data.Store`来管理数据,包括数据的加载、分页等操作。在示例中,我们定义了一个名为`RoleGridStore`的存储类,它继承自`Ext.data.Store`。首先,我们需要指定`model`,这里是`RoleGridModel`,这个...

Global site tag (gtag.js) - Google Analytics