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


关键代码如下:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的海滨体育馆管理系统,源码+数据库+毕业论文+视频演示 本基于Spring Boot的海滨体育馆管理系统设计目标是实现海滨体育馆的信息化管理,提高管理效率,使得海滨体育馆管理工作规范化、高效化。 本文重点阐述了海滨体育馆管理系统的开发过程,以实际运用为开发背景,基于Spring Boot框架,运用了Java技术和MySQL作为系统数据库进行开发,充分保证系统的安全性和稳定性。本系统界面良好,操作简单方便,通过系统概述、系统分析、系统设计、数据库设计、系统测试这几个部分,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结,实现了海滨体育馆相关信息管理的重要功能。 本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高海滨体育馆管理效率。 关键词:海滨体育馆管理,Java技术,MySQL数据库,Spring Boot框架 本基于Spring Boot的海滨体育馆管理系统主要实现了管理员功能模块和学生功能模块两大部分,这两大功能模块分别实现的功能如下: (1)管理员功能模块 管理员登录后可对系统进行全面管理操作,包括个人中心、学生管理、器材管理、器材借出管理、器材归还管理、器材分类管理、校队签到管理、进入登记管理、离开登记管理、活动预约管理、灯光保修管理、体育论坛以及系统管理。 (2)学生功能模块 学生在系统前台可查看系统信息,包括首页、器材、体育论坛以及体育资讯等,没有账号的学生可进行注册操作,注册登录后主要功能模块包括个人中心、器材管理、器材借出管理、器材归还管理、校队签到管理、进入登记管理、离开登记管理、活动预约管理。
毕业设计,基于SpringBoot+Vue+MySQL开发的学科竞赛管理系统,源码+数据库+毕业论文+视频演示 随着国家教育体制的改革,全国各地举办的竞赛活动数目也是逐年增加,面对如此大的数目的竞赛信息,传统竞赛管理方式已经无法满足需求,为了提高效率,竞赛管理系统应运而生。 本学科竞赛管理系统以实际运用为开发背景,基于Spring Boot框架、Vue框架,运用了Java语言和MySQL数据库进行开发设计,充分保证系统的安全性和稳定性。本系统界面良好,操作简单方便,通过系统概述、系统分析、系统设计、数据库设计、系统测试这几个部分,详细的说明了系统的开发过程,最后并对整个开发过程进行了总结,实现了学科竞赛管理的重要功能。 本学科竞赛管理系统运行效果稳定,操作方便、快捷,界面友好,是一个功能全面、实用性好、安全性高,并具有良好的可扩展性、可维护性的学科竞赛管理平台。 关键词:学科竞赛管理,Java语言,MySQL数据库,Vue框架 此学科竞赛管理系统的设计与实现功能分析主要分为管理员功能模块和学生功能模块两大模块,下面详细介绍这两大模块的主要功能: (1)管理员:管理员登陆后可对系统进行全面管理,管理员主要功能模块包括个人中心、学生管理、教师管理、赛项信息管理、赛项报名管理、奖项统计管理、管理员管理以及系统管理,管理员实现了对系统信息的查看、添加、修改和删除的功能。 (2)学生:学生进入本学科竞赛管理系统的设计与实现前台可查看系统信息,包括首页、赛项信息以及新闻资讯等,注册登录后主要功能模块包括个人中心和赛项报名管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值