- 浏览: 48156 次
- 性别:
- 来自: 乌托邦
文章分类
最新评论
-
malson:
非常感谢,我也遇到这个问题,帮了大忙
firefox中的ajax同步传输 -
Sartner:
well play
Lookup Method Injection -
angie_hawk7:
yangguo 写道下辈子不要玩java哈哈,大侠,看过你好几 ...
悲凉的很! -
yangguo:
下辈子不要玩java
悲凉的很! -
ly14574:
...
ExtJS入门之事件(fireEvent)
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里。
前因:
项目需要,快速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里。
发表评论
-
js加载技术
2011-06-30 00:50 1600非阻塞式JavaScript脚本介绍 JavaScr ... -
firefox中的ajax同步传输
2011-06-08 00:11 2095firefox中的ajax同步传输 以前很少使用到 ... -
【整理】IE和FireFox都支持的AJAX解析XML的方法
2011-06-08 00:08 1300========================AJA ... -
ExtJS入门之事件(fireEvent)
2011-05-06 21:26 1812事件是指一个特定的动作,这个动作可以针对HTML元素的,如ke ... -
ext中grid排序问题
2011-04-28 23:00 0国际上都使用ASC码进行排序,面我们却按拼音排序,EXT自动排 ... -
XML XPATH
2011-03-23 22:30 1545<?xml version="1.0&qu ... -
Xml中SelectSingleNode方法中的xpath用法
2011-03-23 21:59 1946view plaincopy to clipboardprin ... -
言多必失
2011-03-23 19:58 722请管理员删掉,谢谢 -
ext面向对象和继承
2011-02-24 21:55 818ext面向对象和继承 -
ext面向对象写法
2011-02-24 21:49 10191、namespace EXT用命名空间来组织类定义,就 ... -
用CSS样式表控制Panel的位置
2011-02-24 21:42 2058<!DOCTYPE html PUBLIC &quo ... -
javascript实现hashMap
2011-01-26 23:28 1311/* ======================== ...
相关推荐
实现前台分页的扩展文件(来源于网络) 博文链接:https://simplehumn.iteye.com/blog/552702
本篇文章将详细讲解基于Ext JS框架实现前台分页的原理和方法。 首先,理解“前台分页”概念。前台分页指的是在客户端,即用户的浏览器端进行数据的分页处理,而不是在服务器端。这种方式的优点是减少了服务器的负载...
本示例主要介绍了如何使用Ext.js这个JavaScript框架来实现前端的分页查询功能。 首先,创建一个名为`resource`的数据存储(Store),它负责从服务器获取数据。这里的`Store`对象定义了字段(fields)、数据源URL...
ExtJS的PagingStore是其框架中用于实现前端分页功能的...以上就是关于ExtJS前台分页插件PagingStore的基本概念和使用方法。通过合理地使用PagingStore,可以有效地管理大量的数据展示,提升Web应用的性能和用户体验。
在这个"用ext写的前台源码 有说明文档"的压缩包中,你将找到使用ExtJS框架开发的前端代码,以及相关的JSON数据处理。 在ExtJS中,你可以使用各种组件如表格、面板、表单、树形结构等来构建复杂的UI。这些组件都封装...
它能够动态加载数据,提供排序、过滤、分页等功能,并且可以自定义列样式和行为。在ExtJS4中,我们可能有以下场景:用户在Grid中查看数据,然后希望将这些数据导出到Excel以便进一步分析或处理。 要实现这个功能,...
同时,Ext的Ext Grid组件能够灵活地展示大量数据,支持分页、排序、过滤等功能,极大地提升了用户体验。 在客户关系管理系统T86中,SSH框架可能被用于后端服务的搭建。Spring管理业务逻辑和服务接口,通过AOP实现...
2.7.5. 谣言说ext不支持前台排序 2.8. 爱生活,EditorGrid。 2.8.1. 旋动舞步,看我们怎么把这个EditorGrid炫出来。 2.8.2. 添加一行,再把它踢掉 2.8.3. 一切就绪,你可以按保存按钮了。 2.8.4. 天马行空,保证提交...
3. **高效的数据处理**:Ext.Net.Utilities.dll 提供的工具类可以帮助优化数据处理,例如在服务器端进行数据过滤、排序和分页,减轻前端的计算负担。 4. **事件处理**:Ext.Net支持C#事件驱动编程模型,开发者可以...
3. **EXT Grid**:EXT Grid是EXT中的核心组件,用于展示数据表格,支持排序、筛选、分页等功能,非常适合人力资源管理中的数据展示需求。 4. **EXT Form**:用于创建各种表单,如员工信息录入、请假申请等,与后端...
这涉及到从前台界面设计到后端数据处理的多个环节。下面将依次介绍相关知识点。 ### 一、Ext简介 Ext是一个用于构建交互式Web应用程序的JavaScript框架。它提供了丰富的UI组件和强大的数据管理功能,支持多种...
前台是jsp加上ext的框架。 后台是hibernate-annotations和spring以及dwr的组合。 顺便演示了一下用servlet来返回json数据给ext框架的方式。 <br>在grid的演示部分,包括了分页的数据调用和如何处理来自...
在EXT.NET框架中,GridView结合了灵活性和高效性,提供了一系列高级功能,如分页、排序、过滤、选择等。本文将深入解析EXT.NET GridView的使用方法,包括前台和后台的代码实现,并着重关注一些关键细节。 首先,...
Store的请求方式多样,包括简单加载(load)、远程排序和过滤(remoteSort和remoteFilter)、分页(paging)等。Store可以配置不同的proxy类型,如AjaxProxy或MemoryProxy,以适应不同的数据获取策略。 对于初学者...
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属性...
一个Ext3 + struts2 + mysql的程序,...代码大概有3000行,功能包括基本的增删改查、头像上传、分页、拦截器等功能,还用ext做了部分前台,有拒不刷新,三级两栋菜单等。这个用来做毕业设计绰绰有余,程序和数据库完整
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 ...
使用EXT的EditorGrid,实现前台页面对数据直接进行增删改查操作。用户的友好性较好,已经实现分页功能。例子中使用了DWR和JSON.含MySQL数据库脚本,并已加入Log4j日志记录。本例详细讲解可以参见:...
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使用`Ext.data.Store`来管理数据,包括数据的加载、分页等操作。在示例中,我们定义了一个名为`RoleGridStore`的存储类,它继承自`Ext.data.Store`。首先,我们需要指定`model`,这里是`RoleGridModel`,这个...