PagingMemoryProxy.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:3k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!
  2.  * Ext JS Library 3.0.0
  3.  * Copyright(c) 2006-2009 Ext JS, LLC
  4.  * licensing@extjs.com
  5.  * http://www.extjs.com/license
  6.  */
  7. /* Fix for Opera, which does not seem to include the map function on Array's */
  8. if (!Array.prototype.map) {
  9.     Array.prototype.map = function(fun){
  10.         var len = this.length;
  11.         if (typeof fun != 'function') {
  12.             throw new TypeError();
  13.         }
  14.         var res = new Array(len);
  15.         var thisp = arguments[1];
  16.         for (var i = 0; i < len; i++) {
  17.             if (i in this) {
  18.                 res[i] = fun.call(thisp, this[i], i, this);
  19.             }
  20.         }
  21.         return res;
  22.     };
  23. }
  24. Ext.ns('Ext.ux.data');
  25. /**
  26.  * @class Ext.ux.data.PagingMemoryProxy
  27.  * @extends Ext.data.MemoryProxy
  28.  * <p>Paging Memory Proxy, allows to use paging grid with in memory dataset</p>
  29.  */
  30. Ext.ux.data.PagingMemoryProxy = Ext.extend(Ext.data.MemoryProxy, {
  31.     constructor : function(data){
  32.         Ext.ux.data.PagingMemoryProxy.superclass.constructor.call(this);
  33.         this.data = data;
  34.     },
  35.     doRequest : function(action, rs, params, reader, callback, scope, options){
  36.         params = params ||
  37.         {};
  38.         var result;
  39.         try {
  40.             result = reader.readRecords(this.data);
  41.         } 
  42.         catch (e) {
  43.             this.fireEvent('loadexception', this, options, null, e);
  44.             callback.call(scope, null, options, false);
  45.             return;
  46.         }
  47.         
  48.         // filtering
  49.         if (params.filter !== undefined) {
  50.             result.records = result.records.filter(function(el){
  51.                 if (typeof(el) == 'object') {
  52.                     var att = params.filterCol || 0;
  53.                     return String(el.data[att]).match(params.filter) ? true : false;
  54.                 }
  55.                 else {
  56.                     return String(el).match(params.filter) ? true : false;
  57.                 }
  58.             });
  59.             result.totalRecords = result.records.length;
  60.         }
  61.         
  62.         // sorting
  63.         if (params.sort !== undefined) {
  64.             // use integer as params.sort to specify column, since arrays are not named
  65.             // params.sort=0; would also match a array without columns
  66.             var dir = String(params.dir).toUpperCase() == 'DESC' ? -1 : 1;
  67.             var fn = function(r1, r2){
  68.                 return r1 < r2;
  69.             };
  70.             result.records.sort(function(a, b){
  71.                 var v = 0;
  72.                 if (typeof(a) == 'object') {
  73.                     v = fn(a.data[params.sort], b.data[params.sort]) * dir;
  74.                 }
  75.                 else {
  76.                     v = fn(a, b) * dir;
  77.                 }
  78.                 if (v == 0) {
  79.                     v = (a.index < b.index ? -1 : 1);
  80.                 }
  81.                 return v;
  82.             });
  83.         }
  84.         // paging (use undefined cause start can also be 0 (thus false))
  85.         if (params.start !== undefined && params.limit !== undefined) {
  86.             result.records = result.records.slice(params.start, params.start + params.limit);
  87.         }
  88.         callback.call(scope, result, options, true);
  89.     }
  90. });
  91. //backwards compat.
  92. Ext.data.PagingMemoryProxy = Ext.ux.data.PagingMemoryProxy;