diff --git a/src/model.js b/src/model.js index 67a9141c..7df18923 100644 --- a/src/model.js +++ b/src/model.js @@ -214,8 +214,13 @@ my.Query = Backbone.Model.extend({ filter.term[fieldId] = value; filters.push(filter); this.set({filters: filters}); - // change does not seem to be triggered ... - this.trigger('change'); + // change does not seem to be triggered automatically + if (value) { + this.trigger('change'); + } else { + // adding a new blank filter and do not want to trigger a new query + this.trigger('change:filters:new-blank'); + } }, // ### removeFilter // diff --git a/src/view-grid.js b/src/view-grid.js index 31a4ac20..ac539f67 100644 --- a/src/view-grid.js +++ b/src/view-grid.js @@ -76,6 +76,9 @@ my.DataGrid = Backbone.View.extend({ facet: function() { self.model.queryState.addFacet(self.state.currentColumn); }, + filter: function() { + self.model.queryState.addTermFilter(self.state.currentColumn, ''); + }, transform: function() { self.showTransformDialog('transform') }, sortAsc: function() { self.setColumnSort('asc') }, sortDesc: function() { self.setColumnSort('desc') }, @@ -167,9 +170,13 @@ my.DataGrid = Backbone.View.extend({ \ \ \ diff --git a/src/view.js b/src/view.js index 601b73ff..84754124 100644 --- a/src/view.js +++ b/src/view.js @@ -295,33 +295,41 @@ my.FilterEditor = Backbone.View.extend({ \
\
\ - {{#termFilters}} \ -
\ - \ -
\ -
\ - \ - \ +
\ +
\ + {{#termFilters}} \ +
\ + \ +
\ +
\ + \ + \ +
\ +
\
\ + {{/termFilters}} \
\ +
\ + \
\ - {{/termFilters}} \ \
\
\ ', events: { 'click .js-hide': 'onHide', - 'click .js-remove-filter': 'onRemoveFilter' + 'click .js-remove-filter': 'onRemoveFilter', + 'submit form': 'onTermFiltersUpdate' }, initialize: function() { this.el = $(this.el); _.bindAll(this, 'render'); this.model.bind('change', this.render); + this.model.bind('change:filters:new-blank', this.render); this.render(); }, render: function() { - var tmplData = this.model.toJSON(); + var tmplData = $.extend(true, {}, this.model.toJSON()); // we will use idx in list as there id ... tmplData.filters = _.map(tmplData.filters, function(filter, idx) { filter.id = idx; @@ -333,6 +341,7 @@ my.FilterEditor = Backbone.View.extend({ tmplData.termFilters = _.map(tmplData.termFilters, function(filter) { var fieldId = _.keys(filter.term)[0]; return { + id: filter.id, fieldId: fieldId, label: fieldId, value: filter.term[fieldId] @@ -356,6 +365,21 @@ my.FilterEditor = Backbone.View.extend({ var $target = $(e.target); var filterId = $target.closest('.filter').attr('data-filter-id'); this.model.removeFilter(filterId); + }, + onTermFiltersUpdate: function(e) { + var self = this; + e.preventDefault(); + var filters = self.model.get('filters'); + var $form = $(e.target); + _.each($form.find('input'), function(input) { + var $input = $(input); + var filterIndex = parseInt($input.attr('data-filter-id')); + var value = $input.val(); + var fieldId = $input.attr('data-filter-field'); + filters[filterIndex].term[fieldId] = value; + }); + self.model.set({filters: filters}); + self.model.trigger('change'); } });