关键代码如下:

Store为:

  1. var ds = new Ext.data.Store({
  2. proxy: new Ext.data.DWRProxy({
  3. callback: Folder.getMessageList,
  4. params: {
  5. start: '0',
  6. limit: PAGE_SIZE
  7. }
  8. }),
  9. //    proxy: new Ext.data.MemoryProxy(messageList),
  10. reader: new Ext.data.ObjectReader({
  11. root: 'messages',
  12. totalProperty: 'total'//用来让Ext的PagingToolbar组件分析总页数
  13. }, [{
  14. name: 'messageId'
  15. }, {
  16. name: 'from'
  17. }, {
  18. name: 'subject'
  19. }, {
  20. name: 'sendTime'
  21. }, {
  22. name: 'contentText'
  23. }])
  24. });
  25. //在进行DWR请求之前,默认在请求参数中添加当前文件夹ID。这样DWR请求中包括的请求参数为:folderId,start,limit
  26. ds.on('beforeload', function(){
  27. Ext.apply(this.baseParams, {
  28. folderId: currentFolderId
  29. });
  30. });
  31. ds.load({
  32. params: {
  33. start: currentStart,
  34. limit: currentLimit
  35. }
  36. });//指定起始位置以及个数

自定义的DWRProxy和ObjectReader:

  1. Ext.data.DWRProxy = function(config){
  2. Ext.data.DWRProxy.superclass.constructor.call(this);
  3. Ext.apply(this, config ||
  4. {});
  5. };
  6. 7Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
  7. //DWR请求
  8. load: function(params, reader, callback, scope, arg){
  9. currentStart = params.start;//保存当前页记录起始位置
  10. currentLimit = params.limit;//保存当前页记录的个数
  11. document.dwr = {
  12. params: params,
  13. reader: reader,
  14. callback: callback,
  15. scope: scope,
  16. arg: arg
  17. };
  18. //处理请求参数,将各个请求参数转换到Array中
  19. var callParams = new Array();
  20. callParams.push(params.folderId);//当前文件夹ID
  21. callParams.push(params.start);//请求的起始位置
  22. callParams.push(params.limit);//请求的个数
  23. if (this.params !== undefined && this.params !== null) {
  24. this.callback.call(this, callParams, this.loadResponse);//DWR请求
  25. }
  26. else {
  27. this.callback.call(thisthis.loadResponse);
  28. }
  29. },
  30. //处理DWR返回
  31. loadResponse: function(response){
  32. var dwr = document.dwr;
  33. try {
  34. //IE throws an exception 'Error: TypeError, Object does not support this operation'
  35. //so use trycatch to suppress this exception
  36. delete document.dwr;//ie不支持delete
  37. }
  38. catch (e) {
  39. }
  40. var result;
  41. try {
  42. result = dwr.reader.read(response);//读取请求返回的json
  43. }
  44. catch (e) {
  45. //this.fireEvent("loadexception",this,dwr,response,e);
  46. dwr.callback.call(dwr.scope, null, dwr.arg, false);
  47. return;
  48. }
  49. dwr.callback.call(dwr.scope, result, dwr.arg, true);
  50. },
  51. failure: function(errorString, exception){
  52. console.log("DWR " + exception);
  53. },
  54. update: function(params, records){
  55. }
  56. });
  57. //自定义一个用于处理返回消息列表的Reader
  58. Ext.data.ObjectReader = function(meta, recordType){
  59. Ext.data.ObjectReader.superclass.constructor.call(this, meta, recordType);
  60. };
  61. Ext.extend(Ext.data.ObjectReader, Ext.data.DataReader, {
  62. //处理DWR返回
  63. read: function(response){
  64. var responseDecode = Ext.util.JSON.decode(response);//注意,由java的json-lib生成的json串需要解码一下
  65. var data = responseDecode.messages;
  66. var sid = this.meta ? this.meta.id : null;
  67. var recordType = this.recordType, fields = recordType.prototype.fields;
  68. var records = [];
  69. var root = data;
  70. for (var i = 0; i < root.length; i++) {
  71. var obj = root[i];
  72. var values = {};
  73. var id = obj[sid];
  74. for (var j = 0, jlen = fields.length; j < jlen; j++) {
  75. var f = fields.items[j];
  76. var k = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
  77. var v = null;
  78. var idx = k.indexOf(".");
  79. if (idx == -1) {
  80. v = obj[k] !== undefined ? obj[k] : f.defaultValue;
  81. }
  82. else {
  83. var k1 = k.substr(0, idx);
  84. var k2 = k.substr(idx + 1);
  85. if (obj[k1] == undefined) {
  86. v = f.defaultValue;
  87. }
  88. else {
  89. var obj2 = obj[k1];
  90. v = obj2[k2] !== undefined ? obj2[k2] : f.defaultValue;
  91. }
  92. }
  93. v = f.convert(v);
  94. values[f.name] = v;
  95. }
  96. var record = new recordType(values, id);
  97. records[records.length] = record;
  98. }
  99. return {
  100. records: records,//返回的消息列表记录
  101. totalRecords: responseDecode.total//总个数
  102. };
  103. }
  104. });

转载于:https://www.cnblogs.com/China-Dragon/archive/2010/05/07/1730156.html

Ext结合DWR的关键代码(运行成功的DWRProxy)相关推荐

  1. 【Windows 逆向】OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )

    文章目录 前言 一.OD 调试数据时硬件断点对应的关键代码 二.删除硬件端点恢复运行 前言 在 [Windows 逆向]OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址 ...

  2. 成功解决代码运行的时候出现的warnings警告问题

    成功解决代码运行的时候出现的warnings警告问题 目录 解决问题 解决方法 解决问题 解决代码运行的时候出现的warnings警告问题 解决方法 在代码运行的时候,会出现一些warnings,但是 ...

  3. moco挡板制作及运行成功<搬代码>

    1.首先是在jdk1.8的环境下进行操作,如何配置就不说了 如果执行完之后出现连接失败一定要关闭防火墙: 查看防火墙状态 systemctl status firewalld 关闭防火墙: syste ...

  4. Java 性能优化:教你提高代码运行的效率

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:五月的仓颉 cnblogs.com/xrq730/p/486 ...

  5. iar代码优化影响运行速度吗_Java 性能优化:教你提高代码运行的效率

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:五月的仓颉 cnblogs.com/xrq730/p/486 ...

  6. 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份

    摘要 开发者有时创建的多线程程序会生成错误值或产生其它奇怪的行为.古怪行为一般出现在一个多线程程序没使用同步连载线程访问关键代码部份的时候.同步连载线程访问关键代码部份是什么意思呢?在这篇文章中解释了 ...

  7. python手机版打了代码运行不了-如何用iPad运行Python代码?

    代码在我的Macbook电脑上跑,没有问题.还拿到学生的Windows 7上跑,也没有问题.这才上传到了Github. 在发布的教程文章里,我也已经把安装软件包的说明写得非常详细. 还针对 Anaco ...

  8. VC++中多线程学习(MFC多线程)三(线程同步包含:原子互锁、关键代码段、互斥器Mutex、Semaphores(信号量)、Event Objects(事件))

    目录 ​​​​​​​​​​​​ 线程同步的必要性: 2.解决同步问题的方法 2.1原子互锁家族函数 2.2Critical Sections(关键代码段.关键区域.临界区域) 2.3 互斥器Mutex ...

  9. 点云学习笔记11——VoxelNet算法+代码运行

    点云学习笔记11--VoxelNet算法+代码运行 一.算法分析 摘要 介绍 相关工作 1.2. 贡献 2.VoxelNet 2.1.特征学习网络 2.1.1 特征学习网络 二.代码复现 2.1.环境 ...

最新文章

  1. 浅谈数据库乐观锁、悲观锁
  2. Android性能优化之APK优化,内容太过真实
  3. 在Apache上搭建pywebsocket提供html5的websocket服务
  4. 【温故知新】CSS学习笔记(链接伪类选择器)
  5. [bzoj4823][洛谷P3756][Cqoi2017]老C的方块
  6. AVS软件解码器的优化
  7. HTML期末作业-牛排美食餐厅网站
  8. Apache Shiro<=1.2.4反序列化RCE漏洞
  9. iOS 使点击事件穿透透明的UIView
  10. 二进制的原码,反码,补码
  11. 为什么在Java中收到NoClassDefFoundError?
  12. android ListView 九大重要属性详细分析
  13. Ubuntu System Panel:Ubuntu 系统的新概念菜单
  14. php加载memcache模块
  15. 十岁陌陌更名“挚文集团”的战略新时代|财报解读
  16. java 记住密码的实现_javaweb实现记住密码功能
  17. journalctl
  18. Modelica学习笔记3
  19. 2000级2班同学聚会邀请函.doc
  20. 2022年金属非金属矿山(地下矿山)主要负责人考试题及模拟考试

热门文章

  1. 2022-2028年中国康养地产行业市场需求前景及投资战略分析报告
  2. 浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用
  3. 2022-2028年中国瓷砖粘结剂行业市场研究及前瞻分析报告
  4. Vue 自定义权限指令
  5. mybatis CRUD操作
  6. 深度学习的分布式训练--数据并行和模型并行
  7. pytorch 动态调整学习率 重点
  8. tf.variable_scope 参数
  9. TVM性能评估分析(二)
  10. Linux下Flash-LED的处理