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);