From 733a9d3275102c31ffc65a265f6aa5f410a768ce Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Wed, 14 Mar 2012 19:45:28 +0000 Subject: [PATCH] [#34,view][s]: query state in url (store into and read from). * Also change so that query values are not automatically JSON.stringify-ied (bad idea since it leads to repeated jsonification of same value ...) --- src/model.js | 2 +- src/view-flot-graph.js | 2 +- src/view.js | 13 ++++++++++--- test/util.test.js | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/model.js b/src/model.js index b4b78594..4f5f5ed7 100644 --- a/src/model.js +++ b/src/model.js @@ -41,7 +41,7 @@ my.Dataset = Backbone.Model.extend({ query: function(queryObj) { this.trigger('query:start'); var self = this; - this.queryState.set(queryObj, {silent: true}); + this.queryState.set(queryObj); var dfd = $.Deferred(); this.backend.query(this, this.queryState.toJSON()).done(function(rows) { var docs = _.map(rows, function(row) { diff --git a/src/view-flot-graph.js b/src/view-flot-graph.js index becc70cc..1950de5f 100644 --- a/src/view-flot-graph.js +++ b/src/view-flot-graph.js @@ -123,7 +123,7 @@ my.FlotGraph = Backbone.View.extend({ this._getEditorData(); // update navigation var qs = my.parseHashQueryString(); - qs['graph'] = this.chartConfig; + qs['graph'] = JSON.stringify(this.chartConfig); my.setHashQueryString(qs); this.redraw(); }, diff --git a/src/view.js b/src/view.js index 7c9aa408..0e8babf2 100644 --- a/src/view.js +++ b/src/view.js @@ -111,6 +111,10 @@ my.DataExplorer = Backbone.View.extend({ my.clearNotifications(); self.el.find('.doc-count').text(self.model.docCount || 'Unknown'); my.notify('Data loaded', {category: 'success'}); + // update navigation + var qs = my.parseHashQueryString(); + qs['reclineQuery'] = JSON.stringify(self.model.queryState.toJSON()); + my.setHashQueryString(qs); }); this.model.bind('query:fail', function(error) { my.clearNotifications(); @@ -134,8 +138,11 @@ my.DataExplorer = Backbone.View.extend({ // note this.model and dataset returned are the same this.model.fetch() .done(function(dataset) { - self.el.find('.doc-count').text(self.model.docCount || 'Unknown'); - self.model.query(); + var queryState = my.parseHashQueryString().reclineQuery; + if (queryState) { + queryState = JSON.parse(queryState); + } + self.model.query(queryState); }) .fail(function(error) { my.notify(error.message, {category: 'error', persist: true}); @@ -296,7 +303,7 @@ my.composeQueryString = function(queryParams) { var queryString = '?'; var items = []; $.each(queryParams, function(key, value) { - items.push(key + '=' + JSON.stringify(value)); + items.push(key + '=' + value); }); queryString += items.join('&'); return queryString; diff --git a/test/util.test.js b/test/util.test.js index dc18b60d..e6711c0d 100644 --- a/test/util.test.js +++ b/test/util.test.js @@ -16,7 +16,7 @@ test('composeQueryString', function () { a: 'b' }; var out = recline.View.composeQueryString(params); - equal(out, '?x="y"&a="b"'); + equal(out, '?x=y&a=b'); }); })(this.jQuery);