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) {
            setSelectedRowIds(self.mapRowsToIds(selectedRows));
          }
          grid.setSelectedRows(selectedRows);
          inHandler = false;
        }
      }

      grid.onSelectedRowsChanged.subscribe(function (e, args) {
        if (inHandler) { return; }
        var newSelectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
        if (!preserveHiddenOnSelectionChange || !grid.getOptions().multiSelect) {
          setSelectedRowIds(newSelectedRowIds);
        } else {
          // keep the ones that are hidden
          var existing = $.grep(selectedRowIds, function (id) { 
            return self.getRowById(id) === undefined; 
          });
          // add the newly selected ones
          setSelectedRowIds(existing.concat(newSelectedRowIds));
        }
      });

      this.onRowsChanged.subscribe(update);

      this.onRowCountChanged.subscribe(update);

      return onSelectedRowIdsChanged;
    }
/***
     * Wires the grid and the DataView together to keep row selection tied to item ids.
     * This is useful since, without it, the grid only knows about rows, so if the items
     * move around, the same rows stay selected instead of the selection moving along
     * with the items.
     *
     * NOTE:  This doesn't work with cell selection model.
     *
     * @param grid {Slick.Grid} The grid to sync selection with.
     * @param preserveHidden {Boolean} Whether to keep selected items that go out of the
     *     view due to them getting filtered out.
     * @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
     */
Wires the grid and the DataView together to keep row selection tied to item ids.
This is useful since, without it, the grid only knows about rows, so if the items
move around, the same rows stay selected instead of the selection moving along
with the items.

This doesn't work with cell selection model.

@param grid {Slick.Grid} The grid to sync selection with.
@param preserveHidden {Boolean} Whether to keep selected items that go out of the
view due to them getting filtered out.
@param preserveHiddenOnSelectionChange {Boolean} Whether to keep selected items
that are currently out of the view  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.
Wires the grid and the DataView together to keep row selection tied to item ids . This is useful since without it the grid only knows about rows so if the items move around the same rows stay selected instead of the selection moving along with the items . This doesn ' t work with cell selection model . @param grid { Slick . Grid } The grid to sync selection with . @param preserveHidden { Boolean } Whether to keep selected items that go out of the view due to them getting filtered out . @param preserveHiddenOnSelectionChange { Boolean } Whether to keep selected items that are currently out of the view 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 .
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) {
            setSelectedRowIds(self.mapRowsToIds(selectedRows));
          }
          grid.setSelectedRows(selectedRows);
          inHandler = false;
        }
      }
      grid.onSelectedRowsChanged.subscribe(function (e, args) {
        if (inHandler) { return; }
        var newSelectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
        if (!preserveHiddenOnSelectionChange || !grid.getOptions().multiSelect) {
          setSelectedRowIds(newSelectedRowIds);
        } else {
          var existing = $.grep(selectedRowIds, function (id) { 
            return self.getRowById(id) === undefined; 
          });
          setSelectedRowIds(existing.concat(newSelectedRowIds));
        }
      });
      this.onRowsChanged.subscribe(update);
      this.onRowCountChanged.subscribe(update);
      return onSelectedRowIdsChanged;
    }
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 ) { setSelectedRowIds ( self . mapRowsToIds ( selectedRows ) ) ; } grid . setSelectedRows ( selectedRows ) ; inHandler = false ; } } grid . onSelectedRowsChanged . subscribe ( function ( e , args ) { if ( inHandler ) { return ; } var newSelectedRowIds = self . mapRowsToIds ( grid . getSelectedRows ( ) ) ; if ( ! preserveHiddenOnSelectionChange || ! grid . getOptions ( ) . multiSelect ) { setSelectedRowIds ( newSelectedRowIds ) ; } else { var existing = $ . grep ( selectedRowIds , function ( id ) { return self . getRowById ( id ) === undefined ; } ) ; setSelectedRowIds ( existing . concat ( newSelectedRowIds ) ) ; } } ) ; this . onRowsChanged . subscribe ( update ) ; this . onRowCountChanged . subscribe ( update ) ; return onSelectedRowIdsChanged ; }
Wires the grid and the DataView together to keep row selection tied to item ids.
Wires the grid and the DataView together to keep row selection tied to item ids .
// keep the ones that are hidden // add the newly selected ones