`
xiongmao3
  • 浏览: 42827 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

创建EXT支持分页的Array Grid(收集整理)

    博客分类:
  • Ext
阅读更多

前因:

项目需要,快速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<r2 ? -1 : 1;   
  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 '<i>' + value + '</i>';   
  33.         }   
  34.   
  35.         // example of custom renderer function   
  36.         function change(val){   
  37.             if(val > 0){   
  38.                 return '<span style="color:green;">' + val + '</span>';   
  39.             }else if(val < 0){   
  40.                 return '<span style="color:red;">' + val + '</span>';   
  41.             }   
  42.             return val;   
  43.         }   
  44.         // example of custom renderer function   
  45.         function pctChange(val){   
  46.             if(val > 0){   
  47.                 return '<span style="color:green;">' + val + '%</span>';   
  48.             }else if(val < 0){   
  49.                 return '<span style="color:red;">' + val + '%</span>';   
  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 grid网格控件实例

    EXT Grid控件是EXT JS库中的一个核心组件,它用于创建功能丰富的数据网格,能够高效地展示和操作大量数据。EXT Grid广泛应用于J2EE框架中,为Web应用提供了强大的数据展示和交互能力。在本实例中,我们将探讨四种...

    ext-grid+json简单应用

    在"EXT-GRID+JSON简单应用"中,我们将探讨如何使用EXT-JS的Grid组件与JSON数据源进行集成,以创建一个动态的数据表格。 EXT-JS的Grid组件允许开发者通过定义列模型、存储器和视图来展示数据。在JSON方面,它是一种...

    ext 4.0 学习笔记.doc

    在本文中,我们将关注EXT 4.0中的Array Grid,这是一种基础的表格展示组件,适合用来显示和操作二维数组数据。 Array Grid的核心是`Ext.grid.Panel`,它是EXT JS中的一个核心组件,用于呈现数据表格。`Ext.grid....

    Ext Js权威指南(.zip.001

    Ex4.0共2个压缩包特性,《ext js权威指南》 ...10.3.4 数据汇总功能:ext.grid.featrue.abstractsummary与ext.grid.featrue. summary / 539 10.3.5 分组功能:ext.grid.featrue.grouping / 543 10.3.6 分组汇总...

    Extjs4前台前台grid导出excel

    首先,我们需要了解`Ext.grid.Panel`,这是ExtJS中的核心组件之一,用于创建数据网格。它能够动态加载数据,提供排序、过滤、分页等功能,并且可以自定义列样式和行为。在ExtJS4中,我们可能有以下场景:用户在Grid...

    ExtJS_grid.rar_Grid javascript_extjs grid

    ExtJS Grid是一款强大的JavaScript组件,用于在Web应用中创建数据密集型的表格视图。它由Sencha公司开发,是Ext JS库的核心部分,广泛应用于企业级应用的前端开发,提供丰富的功能和高度的可定制性。这个"ExtJS_grid...

    php extjs grid 装载数据

    Ext.create('Ext.grid.Panel', { title: '用户列表', store: store, columns: [ {header: 'ID', dataIndex: 'id', width: 50}, {header: '姓名', dataIndex: 'name', flex: 1}, {header: '邮箱', dataIndex: ...

    Ext3.0英文API.CHM

    - **Ext.grid**:提供网格视图,支持数据分页、排序、过滤等功能。 - **Ext.form**:表单组件,支持多种输入控件及验证功能。 - **Ext.tree**:树形结构组件,可用于展示层次结构数据。 4. **高级组件** - **...

    Ext.data专题

    **Grid** 和 **ComboBox** 等组件都是基于Ext.data进行数据操作的。它们利用这些核心组件来实现诸如异步加载、类型转换、分页等功能。 #### 二、数据格式和支持 Ext.data支持多种数据格式,包括但不限于: - **...

    Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码

    之后,创建一个`Ext.grid.GridPanel`实例,将其`store`属性设置为之前创建的`store`,并配置列和分页工具栏。分页工具栏通过`Ext.PagingToolbar`创建,设置`pageSize`为每页显示的记录数,以及与`store`关联,以便...

    extjs grid

    此功能主要是为了解决当用户在一个分页的Grid中选择某一行后,在翻页时依然保持该行被选中的状态。本文将通过解析提供的代码片段以及结合ExtJS的相关API文档,详细介绍如何实现在ExtJS Grid中的行跨页选中功能。 ##...

    extjs核心api详解

    这部分内容将详细讲解如何使用Ext.grid来创建表格,如何配置列、排序、过滤和分页功能,以及如何实现行编辑、拖拽列等功能。 十、Ext类的常用方法 文章最后提到了Ext类的一些常用方法,如addBehaviors、apply、...

    EXTJS教材,教程

    - **自定义能力**:可以生成行号、支持复选框全选、动态选择显示的列、本地和远程分页、单元格自定义渲染、可编辑网格、添加/删除行、脏数据提示、大小调整和行拖拽等。 - **与其他组件交互**:Grid之间以及与Tree...

    GridPanel打印

    首先,EXTJS提供了`Ext.grid.Panel`类来创建GridPanel,它包含了对表格数据的处理和显示。在实现打印功能时,我们通常不会直接打印整个页面,而是将GridPanel的内容转换为一个适合打印的格式。这就涉及到CSS样式调整...

    ExtJS4 动态生成的grid导出为excel示例

    var columns = Ext.Array.filter(grid.columnManager.columns, ``` 此外,可能在`workbook.js`的77、78行,你需要添加初始化语句,以避免因之前的数据残留导致的格式错误: ```javascript this.styles = []; this....

    extjs&使用grid显示数据参照.pdf

    EXTJS提供了多种预定义的data store类型,包括Simple (Array)、XML和JSON,同时也可以自定义data store以适应非标准格式的数据。例如,EXT论坛上有用户贡献的CSV和ColdFusion数据store实现。 向data store添加数据...

    extjs模仿excel效果

    GridPanel是ExtJS中用于显示数据的组件,它可以展示大量数据并支持分页、排序等功能。通过配置列模型(columns),我们可以定义表格的列头、宽度和对齐方式,以及数据字段映射。例如: ```javascript var columns =...

    EXTJS学习文档 适合初学者

    **实用工具(Utils)**则提供了数据格式化、JSON编码解码、Date和Array操作、Ajax请求发送、Cookie管理、CSS管理等多种扩展功能,极大地丰富了EXTJS的功能性和灵活性。 通过以上介绍,初学者可以对EXTJS的基本概念...

    Extjs 性能优化 High Performance ExtJs

    achievementsGridPanel = Ext.extend(Ext.grid.GridPanel, { viewWin: null, editWin: null, addWin: null, findWin: null, downloadWin: null, constructor: function (_cfg) { if (_cfg == null) { _cfg ...

Global site tag (gtag.js) - Google Analytics