[model/backend,#6][s]: BackendMemory now supports saving of Documents.

This commit is contained in:
Rufus Pollock 2012-01-05 01:39:31 +00:00
parent 97f50c5bf5
commit ce076a2eac
2 changed files with 32 additions and 8 deletions

View File

@ -36,12 +36,15 @@ my.Dataset = Backbone.Model.extend({
}
});
my.Document = Backbone.Model.extend({});
my.Document = Backbone.Model.extend({
__type__: 'Document'
});
my.DocumentList = Backbone.Collection.extend({
__type__: 'DocumentList',
// webStore: new WebStore(this.url),
model: my.Document
})
});
// Backends section
// ================
@ -77,6 +80,7 @@ my.BackendMemory = Backbone.Model.extend({
initialize: function(dataset) {
// deep copy
this._datasetAsData = _.extend({}, dataset);
_.bindAll(this, 'sync');
},
getDataset: function() {
var dataset = new my.Dataset({
@ -87,13 +91,14 @@ my.BackendMemory = Backbone.Model.extend({
return dataset;
},
sync: function(method, model, options) {
var self = this;
if (method === "read") {
var dfd = $.Deferred();
// this switching on object type is rather horrible
// think may make more sense to do work in individual objects rather than in central Backbone.sync
if (this.__type__ == 'Dataset') {
var dataset = this;
var rawDataset = this.backend._datasetAsData;
if (model.__type__ == 'Dataset') {
var dataset = model;
var rawDataset = this._datasetAsData;
dataset.set(rawDataset.metadata);
dataset.set({
headers: rawDataset.data.headers
@ -102,6 +107,19 @@ my.BackendMemory = Backbone.Model.extend({
dfd.resolve(dataset);
}
return dfd.promise();
} else if (method === 'update') {
var dfd = $.Deferred();
if (model.__type__ == 'Document') {
_.each(this._datasetAsData.data.rows, function(row, idx) {
if(row.id === model.id) {
self._datasetAsData.data.rows[idx] = model.toJSON();
}
});
dfd.resolve(model);
}
return dfd.promise();
} else {
alert('Not supported: sync on BackendMemory with method ' + method + ' and model ' + model);
}
},
getRows: function(datasetId, numRows, start) {

View File

@ -27,7 +27,7 @@ test('new Dataset', function () {
});
recline.Model.setBackend(backend);
var dataset = backend.getDataset(datasetId);
expect(6);
expect(7);
dataset.fetch().then(function(dataset) {
equal(dataset.get('name'), metadata.name);
equal(dataset.get('headers'), indata.headers);
@ -37,8 +37,14 @@ test('new Dataset', function () {
});
dataset.getRows().then(function(docList) {
equal(docList.length, Math.min(10, indata.rows.length));
deepEqual(docList.models[0].toJSON(), indata.rows[0]);
});
var doc1 = docList.models[0];
deepEqual(doc1.toJSON(), indata.rows[0]);
var newVal = 10;
doc1.set({x: newVal});
doc1.save().then(function() {
equal(backend._datasetAsData.data.rows[0].x, newVal);
})
});
});
});