diff --git a/src/model.js b/src/model.js index b5c61905..3d4e9299 100644 --- a/src/model.js +++ b/src/model.js @@ -291,36 +291,6 @@ my.Dataset = Backbone.Model.extend({ }); -// ### Dataset.restore -// -// Restore a Dataset instance from a serialized state. Serialized state for a -// Dataset is an Object like: -// -//
-// {
-// backend: {backend type - i.e. value of dataset.backend.__type__}
-// dataset: {dataset info needed for loading -- result of dataset.toJSON() would be sufficient but can be simpler }
-// // convenience - if url provided and dataste not this be used as dataset url
-// url: {dataset url}
-// ...
-// }
-my.Dataset.restore = function(state) {
- var dataset = null;
- // hack-y - restoring a memory dataset does not mean much ...
- if (state.backend === 'memory') {
- var datasetInfo = {
- records: [{stub: 'this is a stub dataset because we do not restore memory datasets'}]
- };
- } else {
- var datasetInfo = {
- url: state.url,
- backend: state.backend
- };
- }
- dataset = new recline.Model.Dataset(datasetInfo);
- return dataset;
-};
-
// ## A Record
//
// A single record (or row) in the dataset
diff --git a/src/view.multiview.js b/src/view.multiview.js
index 57c25487..bb778843 100644
--- a/src/view.multiview.js
+++ b/src/view.multiview.js
@@ -345,6 +345,7 @@ my.MultiView = Backbone.View.extend({
'view-graph': graphState,
backend: this.model.backend.__type__,
url: this.model.get('url'),
+ dataset: this.model.toJSON(),
currentView: null,
readOnly: false
},
@@ -437,8 +438,33 @@ my.MultiView = Backbone.View.extend({
// ### MultiView.restore
//
// Restore a MultiView instance from a serialized state including the associated dataset
+//
+// This inverts the state serialization process in Multiview
my.MultiView.restore = function(state) {
- var dataset = recline.Model.Dataset.restore(state);
+//
+// {
+// backend: {backend type - i.e. value of dataset.backend.__type__}
+// dataset: {dataset info needed for loading -- result of dataset.toJSON() would be sufficient but can be simpler }
+// // convenience - if url provided and dataste not this be used as dataset url
+// url: {dataset url}
+// ...
+// }
+ var dataset = null;
+ // hack-y - restoring a memory dataset does not mean much ... (but useful for testing!)
+ if (state.backend === 'memory') {
+ var datasetInfo = {
+ backend: 'memory',
+ records: [{stub: 'this is a stub dataset because we do not restore memory datasets'}]
+ };
+ } else {
+ var datasetInfo = _.extend({
+ url: state.url,
+ backend: state.backend
+ },
+ state.dataset
+ );
+ }
+ dataset = new recline.Model.Dataset(datasetInfo);
var explorer = new my.MultiView({
model: dataset,
state: state
@@ -446,7 +472,6 @@ my.MultiView.restore = function(state) {
return explorer;
}
-
// ## Miscellaneous Utilities
var urlPathRegex = /^([^?]+)(\?.*)?/;
diff --git a/test/view.multiview.test.js b/test/view.multiview.test.js
index 47856855..db8cbb53 100644
--- a/test/view.multiview.test.js
+++ b/test/view.multiview.test.js
@@ -32,6 +32,7 @@ test('get State', function () {
equal(state.get('query').size, 100);
deepEqual(state.get('view-graph').group, null);
equal(state.get('backend'), 'memory');
+ equal(state.get('dataset').url, 'xyz');
ok(state.get('url') === url);
$el.remove();
});
@@ -78,8 +79,22 @@ test('restore (from serialized state)', function() {
});
var state = explorer.state.toJSON();
var explorerNew = recline.View.MultiView.restore(state);
+ equal(explorerNew.model.get('backend'), 'memory');
var out = explorerNew.state.toJSON();
equal(out.backend, state.backend);
+
+ var dataset = new recline.Model.Dataset({
+ url: 'http://data.london.gov.uk/datafiles/transport/tfl_passengers.csv',
+ format: 'csv',
+ backend: 'dataproxy'
+ });
+ var explorer = new recline.View.MultiView({
+ model: dataset,
+ });
+ var state = explorer.state.toJSON();
+ var explorerNew = recline.View.MultiView.restore(state);
+ equal(explorerNew.model.get('backend'), 'dataproxy');
+ equal(explorerNew.model.get('format'), 'csv');
});
})(this.jQuery);