测试代码:
<!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)
}));
}
});