summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--slick.dataview.js27
1 files changed, 23 insertions, 4 deletions
diff --git a/slick.dataview.js b/slick.dataview.js
index 8103714..3c3d204 100644
--- a/slick.dataview.js
+++ b/slick.dataview.js
@@ -852,19 +852,36 @@
* @param preserveHiddenOnSelectionChange {Boolean} Whether to keep selected items
* that are currently out of the view (see preserveHidden) as selected when selection
* changes.
+ * @return {Slick.Event} An event that notifies when an internal list of selected row ids
+ * changes. This is useful since, in combination with the above two options, it allows
+ * access to the full list selected row ids, and not just the ones visible to the grid.
* @method syncGridSelection
*/
function syncGridSelection(grid, preserveHidden, preserveHiddenOnSelectionChange) {
var self = this;
var inHandler;
var selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
+ var onSelectedRowIdsChanged = new Slick.Event();
+
+ function setSelectedRowIds(rowIds) {
+ if (selectedRowIds.join(",") == rowIds.join(",")) {
+ return;
+ }
+
+ selectedRowIds = rowIds;
+
+ onSelectedRowIdsChanged.notify({
+ "grid": grid,
+ "ids": selectedRowIds
+ }, new Slick.EventData(), self);
+ }
function update() {
if (selectedRowIds.length > 0) {
inHandler = true;
var selectedRows = self.mapIdsToRows(selectedRowIds);
if (!preserveHidden) {
- selectedRowIds = self.mapRowsToIds(selectedRows);
+ setSelectedRowIds(self.mapRowsToIds(selectedRows));
}
grid.setSelectedRows(selectedRows);
inHandler = false;
@@ -875,18 +892,20 @@
if (inHandler) { return; }
var newSelectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
if (!preserveHiddenOnSelectionChange || !grid.getOptions().multiSelect) {
- selectedRowIds = newSelectedRowIds;
+ setSelectedRowIds(newSelectedRowIds);
} else {
// keep the ones that are hidden
- selectedRowIds = $.grep(selectedRowIds, function(id) { return self.getRowById(id) === undefined; });
+ var existing = $.grep(selectedRowIds, function(id) { return self.getRowById(id) === undefined; });
// add the newly selected ones
- selectedRowIds = selectedRowIds.concat(newSelectedRowIds);
+ setSelectedRowIds(existing.concat(newSelectedRowIds));
}
});
this.onRowsChanged.subscribe(update);
this.onRowCountChanged.subscribe(update);
+
+ return onSelectedRowIdsChanged;
}
function syncGridCellCssStyles(grid, key) {