123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- define("dojox/grid/_SelectionPreserver", [
- "dojo/_base/declare",
- "dojo/_base/connect",
- "dojo/_base/lang",
- "dojo/_base/array"
- ], function(declare, connect, lang, array){
- return declare("dojox.grid._SelectionPreserver", null, {
- // summary:
- // Preserve selections across various user actions.
- //
- // description:
- // When this feature is turned on, Grid will try to preserve selections across actions, e.g. sorting, filtering etc.
- //
- // Precondition - Identifier(id) is required for store since id is the only way for differentiating row items.
- // Known issue - The preserved selections might be inaccurate if some unloaded rows are previously selected by range(e.g.SHIFT + click)
- //
- // example:
- // | //To turn on this - please set 'keepSelection' attribute to true
- // | <div dojoType="dojox.grid.DataGrid" keepSelection = true .../>
- // | <div dojoType="dojox.grid.TreeGrid" keepSelection = true .../>
- // | <div dojoType="dojox.grid.LazyTreeGrid" keepSelection = true .../>
-
- constructor: function(selection){
- this.selection = selection;
- var grid = this.grid = selection.grid;
- this.reset();
- this._connects = [
- connect.connect(grid, '_setStore', this, 'reset'),
- connect.connect(grid, '_addItem', this, '_reSelectById'),
- connect.connect(selection, 'addToSelection', lang.hitch(this, '_selectById', true)),
- connect.connect(selection, 'deselect', lang.hitch(this, '_selectById', false)),
- connect.connect(selection, 'deselectAll', this, 'reset')
- ];
- },
- destroy: function(){
- this.reset();
- array.forEach(this._connects, connect.disconnect);
- delete this._connects;
- },
- reset: function(){
- this._selectedById = {};
- },
- _reSelectById: function(item, index){
- // summary:
- // When some rows is fetched, determine whether it should be selected.
- if(item && this.grid._hasIdentity){
- this.selection.selected[index] = this._selectedById[this.grid.store.getIdentity(item)];
- }
- },
- _selectById: function(toSelect, inItemOrIndex){
- // summary:
- // Record selected rows by ID.
- if(this.selection.mode == 'none' || !this.grid._hasIdentity){ return; }
- var item = inItemOrIndex, g = this.grid;
- if(typeof inItemOrIndex == "number" || typeof inItemOrIndex == "string"){
- var entry = g._by_idx[inItemOrIndex];
- item = entry && entry.item;
- }
- if(item){
- this._selectedById[g.store.getIdentity(item)] = !!toSelect;
- }
- return item;
- }
- });
- });
|