Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save lklepner/61b1b3aece967058b538 to your computer and use it in GitHub Desktop.
Save lklepner/61b1b3aece967058b538 to your computer and use it in GitHub Desktop.
Extend Backgrid ClientSideFilter with a pick filter, to pre-filter data set. Useful to combine text search with a select, checkboxes or radio buttons filters.
// Subclass Backgrid Filter to pass an extra 'pick' filter
Backgrid.ClientSideFilterWithPickFilter = Backgrid.Extension.ClientSideFilter.extend({
pickFilter: null,
setPickFilter: function (attrs) {
this.pickFilter = attrs;
this.search();
return this;
},
makeMatcher: function (query) {
var regexp = this.makeRegExp(query);
return function (model) {
var json = model.toJSON();
// Test the pick filter (if set)
if (this.pickFilter) {
var match = _.find(this.pickFilter, function (value, key) {
return json[key] === value;
});
if (match === undefined) return false;
}
// Test the search filter
var keys = this.fields || model.keys();
for (var i = 0, l = keys.length; i < l; i++) {
if (regexp.test(json[keys[i]] + "")) return true;
}
return false;
};
}
});
// Assuming you have a checkbox to only show rows with Valid=true
var filter = new Backgrid.ClientSideFilterWithPickFilter({...});
$('input[name=valid]').change(function(e) {
filter.setPickFilter(e.target.checked ? {Valid: true} : null);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment