diff --git a/demo/js/app.js b/demo/js/app.js index e921031c..a6ca9f63 100755 --- a/demo/js/app.js +++ b/demo/js/app.js @@ -95,9 +95,10 @@ function localDataset() { backend.addDataset(inData); var dataset = new recline.Model.Dataset({id: datasetId}, backend); // TODO: auto-compute in Memory backend ?? - dataset.facets = { - 'country': { - terms: [ + dataset.facets = new recline.Model.FacetList([ + { + id: 'country', + result: [ { term: 'UK', count: 3 @@ -112,7 +113,7 @@ function localDataset() { } ] } - }; + ]); return dataset; } diff --git a/src/model.js b/src/model.js index 41934e67..b3743381 100644 --- a/src/model.js +++ b/src/model.js @@ -23,7 +23,7 @@ my.Dataset = Backbone.Model.extend({ } this.fields = new my.FieldList(); this.currentDocuments = new my.DocumentList(); - this.facets = {}; + this.facets = new my.FacetList(); this.docCount = null; this.queryState = new my.Query(); this.queryState.bind('change', this.query); @@ -119,24 +119,36 @@ my.Query = Backbone.Model.extend({ , from: 0 , facets: {} }, - initialize: function() { - _.bindAll(this, 'addFacet'); - }, + // Set (update or add) a terms filter + // http://www.elasticsearch.org/guide/reference/query-dsl/terms-filter.html + setFilter: function(fieldId, values) { + } +}); +my.Facet = Backbone.Model.extend({ + defaults: { + query: null, + result: null + } +}); + +my.FacetList = Backbone.Collection.extend({ + model: my.Facet, addFacet: function(fieldId) { - // TODO: utilize field info to determine facet type ?? - var facets = this.get('facets'); - if (fieldId in facets) { + // Assume id and fieldId should be the same (TODO: this need not be true if we want to add two different type of facets on same field) + if (fieldId in this) { return; } - facets[fieldId] = { - terms: { - field: fieldId + // TODO: utilize field info to determine facet type ?? + var facet = new my.Facet({ + id: fieldId, + query: { + terms: { + field: fieldId + } } - } - this.set({facets: facets}); - // trigger change event (does not seem to be triggered o/w) - // this.change(); + }); + this.add(facet); } }); diff --git a/src/view.js b/src/view.js index ae9c24f4..a463d8b5 100644 --- a/src/view.js +++ b/src/view.js @@ -168,11 +168,9 @@ my.DataExplorer = Backbone.View.extend({ model: this.model.queryState }); this.el.find('.header').append(queryEditor.el); - var queryFacetEditor = new my.QueryFacetEditor({ - model: this.model.queryState - }, - this.model - ); + var queryFacetEditor = new my.FacetQueryEditor({ + model: this.model + }); this.el.find('.header').append(queryFacetEditor.el); }, @@ -281,58 +279,52 @@ my.QueryEditor = Backbone.View.extend({ } }); -my.QueryFacetEditor = Backbone.View.extend({ +my.FacetQueryEditor = Backbone.View.extend({ className: 'recline-query-facet-editor', template: ' \ - Add filter on \ -