[model/backend,#6][s]: BackendMemory now supports saving of Documents.
This commit is contained in:
28
src/model.js
28
src/model.js
@@ -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({
|
my.DocumentList = Backbone.Collection.extend({
|
||||||
|
__type__: 'DocumentList',
|
||||||
// webStore: new WebStore(this.url),
|
// webStore: new WebStore(this.url),
|
||||||
model: my.Document
|
model: my.Document
|
||||||
})
|
});
|
||||||
|
|
||||||
// Backends section
|
// Backends section
|
||||||
// ================
|
// ================
|
||||||
@@ -77,6 +80,7 @@ my.BackendMemory = Backbone.Model.extend({
|
|||||||
initialize: function(dataset) {
|
initialize: function(dataset) {
|
||||||
// deep copy
|
// deep copy
|
||||||
this._datasetAsData = _.extend({}, dataset);
|
this._datasetAsData = _.extend({}, dataset);
|
||||||
|
_.bindAll(this, 'sync');
|
||||||
},
|
},
|
||||||
getDataset: function() {
|
getDataset: function() {
|
||||||
var dataset = new my.Dataset({
|
var dataset = new my.Dataset({
|
||||||
@@ -87,13 +91,14 @@ my.BackendMemory = Backbone.Model.extend({
|
|||||||
return dataset;
|
return dataset;
|
||||||
},
|
},
|
||||||
sync: function(method, model, options) {
|
sync: function(method, model, options) {
|
||||||
|
var self = this;
|
||||||
if (method === "read") {
|
if (method === "read") {
|
||||||
var dfd = $.Deferred();
|
var dfd = $.Deferred();
|
||||||
// this switching on object type is rather horrible
|
// 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
|
// think may make more sense to do work in individual objects rather than in central Backbone.sync
|
||||||
if (this.__type__ == 'Dataset') {
|
if (model.__type__ == 'Dataset') {
|
||||||
var dataset = this;
|
var dataset = model;
|
||||||
var rawDataset = this.backend._datasetAsData;
|
var rawDataset = this._datasetAsData;
|
||||||
dataset.set(rawDataset.metadata);
|
dataset.set(rawDataset.metadata);
|
||||||
dataset.set({
|
dataset.set({
|
||||||
headers: rawDataset.data.headers
|
headers: rawDataset.data.headers
|
||||||
@@ -102,6 +107,19 @@ my.BackendMemory = Backbone.Model.extend({
|
|||||||
dfd.resolve(dataset);
|
dfd.resolve(dataset);
|
||||||
}
|
}
|
||||||
return dfd.promise();
|
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) {
|
getRows: function(datasetId, numRows, start) {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ test('new Dataset', function () {
|
|||||||
});
|
});
|
||||||
recline.Model.setBackend(backend);
|
recline.Model.setBackend(backend);
|
||||||
var dataset = backend.getDataset(datasetId);
|
var dataset = backend.getDataset(datasetId);
|
||||||
expect(6);
|
expect(7);
|
||||||
dataset.fetch().then(function(dataset) {
|
dataset.fetch().then(function(dataset) {
|
||||||
equal(dataset.get('name'), metadata.name);
|
equal(dataset.get('name'), metadata.name);
|
||||||
equal(dataset.get('headers'), indata.headers);
|
equal(dataset.get('headers'), indata.headers);
|
||||||
@@ -37,7 +37,13 @@ test('new Dataset', function () {
|
|||||||
});
|
});
|
||||||
dataset.getRows().then(function(docList) {
|
dataset.getRows().then(function(docList) {
|
||||||
equal(docList.length, Math.min(10, indata.rows.length));
|
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);
|
||||||
|
})
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user