Extjs的DWRProxy

来源:互联网 发布:油皮适合的面霜知乎 编辑:程序博客网 时间:2024/05/17 07:27

dwrproxy.js

  1. Ext.data.DWRProxy = function(dwrCall, args) {
  2.     Ext.data.DWRProxy.superclass.constructor.call(this);
  3.     this.dwrCall = dwrCall;
  4.     this.args = args;
  5. };
  6. Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
  7.     load : function(params, reader, callback, scope, arg) {
  8.         if (this.fireEvent("beforeload"this, params) !== false) {
  9.             var delegate = this.loadResponse.createDelegate(this, [reader,
  10.                     callback, scope, arg], 1);
  11.             var callParams = new Array();
  12.             if (this.args && (this.args.length > 0))
  13.                 callParams = this.args.slice();
  14.             if (params!=null){
  15.                 callParams.push(params);
  16.             }
  17.             callParams.push(delegate);
  18.             this.dwrCall.apply(this, callParams);
  19.         } else {
  20.             callback.call(scope || thisnull, arg, false);
  21.         }
  22.     },
  23.     loadResponse : function(response, reader, callback, scope, arg) {
  24.         var result;
  25.         try {
  26.             result = reader.read(response);
  27.         } catch (e) {
  28.             this.fireEvent("loadexception"thisnull, response, e);
  29.             callback.call(scope, null, arg, false);
  30.             return;
  31.         }
  32.         callback.call(scope, result, arg, true);
  33.     },
  34.     update : function(dataSet) {
  35.     },
  36.     updateResponse : function(dataSet) {
  37.     }
  38. });
  39. Ext.data.ObjectReader = function(meta, recordType) {
  40.     Ext.data.ObjectReader.superclass.constructor.call(this, meta, recordType);
  41. };
  42. Ext.extend(Ext.data.ObjectReader, Ext.data.DataReader, {
  43.     read : function(response) {
  44.         var sid = this.meta ? this.meta.id : null;
  45.         var rootProp=this.meta ? this.meta.root : null;
  46.         var totalProp=this.meta ? this.meta.totalProperty : null;
  47.         
  48.         var recordType = this.recordType, fields = recordType.prototype.fields;
  49.         var records = [];
  50.         var root = rootProp?response[rootProp]:response;
  51.         
  52.         for (var i = 0; i < root.length; i++) {
  53.             var obj = root[i];
  54.             var values = {};
  55.             var id = obj[sid];
  56.             for (var j = 0, jlen = fields.length; j < jlen; j++) {
  57.                 var f = fields.items[j];
  58.                 var k = f.mapping !== undefined && f.mapping !== null
  59.                         ? f.mapping
  60.                         : f.name;
  61.                 var v = obj[k] !== undefined ? obj[k] : f.defaultValue;
  62.                 v = f.convert(v);
  63.                 values[f.name] = v;
  64.             }
  65.             var record = new recordType(values, id);
  66.             records[records.length] = record;
  67.         }
  68.         return {
  69.             records : records,
  70.             totalRecords : totalProp?response[totalProp]:records.length
  71.         };
  72.     }
  73. });

js页面调用实例:

  1.     var recordType = Ext.data.Record.create([{
  2.         name : "id",
  3.         type : "int"
  4.     }, {
  5.         name : "name",
  6.         type : "string"
  7.     }, {
  8.         name : "birthday",
  9.         mapping : "birthday",
  10.         type : "date"
  11.     }]);
  12.     var ds = new Ext.data.Store({
  13.         remoteSort:true,
  14.         proxy : new Ext.data.DWRProxy(StudentService.getList),
  15.         reader : new Ext.data.ObjectReader({
  16.             id : 'id',
  17.             root : 'data',
  18.             totalProperty : 'total'
  19.         },recordType)
  20.     });
原创粉丝点击