From 19f933bcbd3b09a25b94376cb640b0d6e567deb6 Mon Sep 17 00:00:00 2001 From: Federico Baron Date: Mon, 21 Dec 2015 18:35:07 +0100 Subject: [PATCH] Better check for "select-all" status on select and refresh These improvements for select-all on "backgrid:refresh" and "backgrid:selected" will prevent errors on computing check status of select all header when using pageable collections. This fix for example the bug on a pageable collection with page size 100: - select all from page 1 - load page 2 - KO, the rows of page 2 are all selected --- backgrid-select-all.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/backgrid-select-all.js b/backgrid-select-all.js index bed1cfd..8f328af 100644 --- a/backgrid-select-all.js +++ b/backgrid-select-all.js @@ -172,14 +172,16 @@ var selectedModels = this.selectedModels = {}; this.listenTo(collection.fullCollection || collection, "backgrid:selected", function (model, selected) { - if (selected) selectedModels[model.id || model.cid] = 1; + if (selected) { + selectedModels[model.id || model.cid] = 1; + if (_.intersection(_.keys(selectedModels), (collection.fullCollection || collection).pluck('id')).length === (collection.fullCollection || collection).length) { + this.checkbox().prop("checked", true); + } + } else { delete selectedModels[model.id || model.cid]; this.checkbox().prop("checked", false); } - if (_.keys(selectedModels).length === (collection.fullCollection|| collection).length) { - this.checkbox().prop("checked", true); - } }); this.listenTo(collection.fullCollection || collection, "remove", function (model) { @@ -190,14 +192,11 @@ }); this.listenTo(collection, "backgrid:refresh", function () { - if ((collection.fullCollection || collection).length === 0) { - this.checkbox().prop("checked", false); - } - else { - var checked = this.checkbox().prop("checked"); + this.checkbox().prop("checked", false); + if ((collection.fullCollection || collection).length !== 0) { for (var i = 0; i < collection.length; i++) { var model = collection.at(i); - if (checked || selectedModels[model.id || model.cid]) { + if (selectedModels[model.id || model.cid]) { model.trigger("backgrid:select", model, true); } }