Blame view

WebRoot/plugins/websocketInstantMsg/ext4/ux/data/PagingMemoryProxy.js 2.66 KB
ad5081d3   孙向锦   初始化项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  Ext.ns('Ext.ux.data');
  /**
   * @class Ext.ux.data.PagingMemoryProxy
   * @extends Ext.data.proxy.Memory
   * <p>Paging Memory Proxy, allows to use paging grid with in memory dataset</p>
   */
  Ext.define('Ext.ux.data.PagingMemoryProxy', {
      extend: 'Ext.data.proxy.Memory',
      alias: 'proxy.pagingmemory',
      read : function(operation, callback, scope){
          var reader = this.getReader(),
              result = reader.read(this.data),
              sorters, filters, sorterFn, records;
  
          // filtering
          filters = operation.filters;
          if (filters.length > 0) {
              //at this point we have an array of  Ext.util.Filter objects to filter with,
              //so here we construct a function that combines these filters by ANDing them together
              records = [];
  
              Ext.each(result.records, function(record) {
                  var isMatch = true,
                      length = filters.length,
                      i;
  
                  for (i = 0; i < length; i++) {
                      var filter = filters[i],
                          fn     = filter.filterFn,
                          scope  = filter.scope;
  
                      isMatch = isMatch && fn.call(scope, record);
                  }
                  if (isMatch) {
                      records.push(record);
                  }
              }, this);
  
              result.records = records;
          }
          
          // sorting
          sorters = operation.sorters;
          if (sorters.length > 0) {
              //construct an amalgamated sorter function which combines all of the Sorters passed
              sorterFn = function(r1, r2) {
                  var result = sorters[0].sort(r1, r2),
                      length = sorters.length,
                      i;
                  
                      //if we have more than one sorter, OR any additional sorter functions together
                      for (i = 1; i < length; i++) {
                          result = result || sorters[i].sort.call(this, r1, r2);
                      }                
                 
                  return result;
              };
      
              result.records.sort(sorterFn);
          }
          
          // paging (use undefined cause start can also be 0 (thus false))
          if (operation.start !== undefined && operation.limit !== undefined) {
              result.records = result.records.slice(operation.start, operation.start + operation.limit);
          }
  
          Ext.apply(operation, {
              resultSet: result
          });
          
          operation.setCompleted();
          operation.setSuccessful();
  
          Ext.callback(callback, scope || me, [operation]);
      }
  });
  
  //backwards compat.
  Ext.data.PagingMemoryProxy = Ext.ux.data.PagingMemoryProxy;