测试代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ext.dx.PagingStore</title>
<link type="text/css" rel="stylesheet" href="qunit.css"/>
<script type="text/javascript" src="ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all.js"></script>
<script type="text/javascript" src="qunit.js"></script>
<script type="text/javascript" src="ext/custom.js"></script>
<script type="text/javascript">
var store = new Ext.dx.PagingStore({
data:[1,2,3,4,5,6,7,8],
fields:[],
autoLoad:false
});
test("beforeload", function() {
equals(store.getCount(), 0, "count");
equals(store.getTotalCount(), 0, "totalCount");
});
asyncTest("load", function() {
expect(3);
ok(store.load({params:{start:0,limit:5}}), "success");
equals(store.getCount(),5,"count");
equals(store.getTotalCount(), 8, "totalCount");
start();
});
asyncTest("loadWithNoEnoughElements", function() {
expect(2);
ok(store.load({params:{start:0,limit:10}}), "success");
equals(store.getCount(),8,"count");
start();
});
asyncTest("loadOutOfElementBounds", function() {
expect(2);
ok(store.load({params:{start:10,limit:10}}), "success");
equals(store.getCount(),0,"count");
start();
});
asyncTest("autoLoad", function() {
expect(1, "unload");
var loaded = false;
var store = new Ext.dx.PagingStore({
fields:[], data:[1],autoLoad:true,
proxy:{
on:function() {
},
relayEvents:function() {
},
request:function() {
ok(true);
}
}
});
start();
});
test("shouldRaiseExceptionWhenDataWasNull", function() {
try {
new Ext.ds.PagingStore({});
throw "Should raise exception when data was null";
} catch(expected) {
ok(true);
}
});
</script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup</div>
</body>
</html>
源码:
Ext.dx = {};Ext.dx.PagingMemoryProxy = Ext.extend(Ext.data.MemoryProxy, { doRequest:function(action, rs, params, reader, callback, scope, arg) { params = params || {}; var data = this.readSubRecords(params); var result; try { result = reader.readRecords(data); } catch(e) { this.fireEvent("loadexception", this, null, arg, e); this.fireEvent('exception', this, 'response', action, arg, null, e); callback.call(scope, null, arg, false); return; } result.totalRecords = this.data.length; callback.call(scope, result, arg, true); }, readSubRecords:function(params) { var start = params.start || 0; var end = start + (params.limit || 0); return this.data.slice(start, end); } }); Ext.dx.PagingStore = Ext.extend(Ext.data.Store, { constructor:function(c) { var data = c.data; if (c.data) delete c.data; Ext.dx.PagingStore.superclass.constructor.call(this, Ext.applyIf(c, { reader:new Ext.data.ArrayReader(c), proxy:new Ext.dx.PagingMemoryProxy(data) })); } });