diff options
author | Michael Leibman <michael.leibman@gmail.com> | 2013-11-17 21:59:53 -0800 |
---|---|---|
committer | Michael Leibman <michael.leibman@gmail.com> | 2013-11-17 21:59:53 -0800 |
commit | bbe9bfb5a5c1981f7264d410e2b93ec1c98ce2b9 (patch) | |
tree | b0e8091899f92fd1f98b4b40d672e62988380d5a /slick.dataview.js | |
parent | 35e64491df3730a47089a1022ddf3e672a3add86 (diff) | |
download | SlickGrid-bbe9bfb5a5c1981f7264d410e2b93ec1c98ce2b9.zip SlickGrid-bbe9bfb5a5c1981f7264d410e2b93ec1c98ce2b9.tar.gz SlickGrid-bbe9bfb5a5c1981f7264d410e2b93ec1c98ce2b9.tar.bz2 |
#794 - Add an event that exposes the internal selected row ids.
Make DataView. syncGridSelection() return an event that notifies when
an internal list of selected row ids changes.
Diffstat (limited to 'slick.dataview.js')
-rw-r--r-- | slick.dataview.js | 27 |
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) { |