add method to replace a filter

This commit is contained in:
kielni 2013-09-06 11:40:31 -07:00
parent c8f7ab56ff
commit ef1064b888
2 changed files with 37 additions and 0 deletions

View File

@ -510,6 +510,23 @@ my.Query = Backbone.Model.extend({
filters.push(ourfilter);
this.trigger('change:filters:new-blank');
},
replaceFilter: function(filter) {
// delete filter on the same field, then add
var filters = this.get('filters');
var idx = -1;
_.each(this.get('filters'), function(filter, key, list) {
if (filter.field == filter.field) {
idx = key;
}
});
// trigger just one event (change:filters:new-blank) instead of one for remove and
// one for add
if (idx >= 0) {
filters.splice(idx, 1);
this.set({filters: filters});
}
this.addFilter(filter);
},
updateFilter: function(index, value) {
},
// ### removeFilter

View File

@ -374,4 +374,24 @@ test('Query.addFilter', function () {
deepEqual(exp, query.get('filters')[2]);
});
test('Query.replaceFilter', function () {
var query = new recline.Model.Query();
query.addFilter({type: 'term', field: 'xyz'});
var exp = {
field: 'xyz',
type: 'term',
term: ''
};
deepEqual(query.get('filters')[0], exp);
query.replaceFilter({type: 'term', field: 'abc'});
exp = {
field: 'abc',
type: 'term',
term: ''
};
deepEqual(query.get('filters')[0], exp);
});
})(this.jQuery);