48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
// replaces `Backbone.sync` with a OKFN webstore based tabular data source
|
|
|
|
var WebStore = function(url) {
|
|
this.url = url;
|
|
this.headers = [];
|
|
this.totalRows = 0;
|
|
this.getTabularData = function() {
|
|
var dfd = $.Deferred();
|
|
var tabularData = {
|
|
headers: ['x', 'y', 'z']
|
|
, rows: [
|
|
{x: 1, y: 2, z: 3}
|
|
, {x: 2, y: 4, z: 6}
|
|
, {x: 3, y: 6, z: 9}
|
|
, {x: 4, y: 8, z: 12}
|
|
, {x: 5, y: 10, z: 15}
|
|
, {x: 6, y: 12, z: 18}
|
|
]
|
|
, getLength: function() { return this.rows.length; }
|
|
, getRows: function(numRows, start) {
|
|
if (start === undefined) {
|
|
start = 0;
|
|
}
|
|
var dfd = $.Deferred();
|
|
var results = this.rows.slice(start, start + numRows);
|
|
dfd.resolve(results);
|
|
return dfd.promise();
|
|
}
|
|
}
|
|
dfd.resolve(tabularData);
|
|
return dfd.promise();
|
|
}
|
|
};
|
|
|
|
|
|
// Override `Backbone.sync` to delegate to the model or collection's
|
|
// webStore property, which should be an instance of `WebStore`.
|
|
Backbone.sync = function(method, model, options) {
|
|
var resp;
|
|
var store = model.webStore || model.collection.webStore;
|
|
|
|
if (method === "read") {
|
|
store.getTabularData().then(function(tabularData) {
|
|
tabularData.getRows(10).then(options.success, options.error)
|
|
})
|
|
}
|
|
|
|
}; |