<!DOCTYPE html>
|
<html>
|
<head>
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<title>The source code</title>
|
<link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
|
<script type="text/javascript" src="../resources/prettify/prettify.js"></script>
|
<style type="text/css">
|
.highlight { display: block; background-color: #ddd; }
|
</style>
|
<script type="text/javascript">
|
function highlight() {
|
document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
|
}
|
</script>
|
</head>
|
<body onload="prettyPrint(); highlight();">
|
<pre class="prettyprint lang-js"><span id='Ext-ux-data-PagingMemoryProxy'>/**
|
</span> * Paging Memory Proxy, allows to use paging grid with in memory dataset
|
*/
|
Ext.define('Ext.ux.data.PagingMemoryProxy', {
|
extend: 'Ext.data.proxy.Memory',
|
alias: 'proxy.pagingmemory',
|
alternateClassName: 'Ext.data.PagingMemoryProxy',
|
|
<span id='Ext-ux-data-PagingMemoryProxy-method-read'> read : function(operation, callback, scope){
|
</span> var reader = this.getReader(),
|
result = reader.read(this.data),
|
sorters, filters, sorterFn, records;
|
|
scope = scope || this;
|
// 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;
|
result.totalRecords = result.total = records.length;
|
}
|
|
// 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);
|
result.count = result.records.length;
|
}
|
|
Ext.apply(operation, {
|
resultSet: result
|
});
|
|
operation.setCompleted();
|
operation.setSuccessful();
|
|
Ext.Function.defer(function () {
|
Ext.callback(callback, scope, [operation]);
|
}, 10);
|
}
|
});
|
</pre>
|
</body>
|
</html>
|