gridx-rails 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +3 -3
  3. data/app/assets/javascripts/gridx/Grid.js +3 -2
  4. data/app/assets/javascripts/gridx/core/model/cache/_Cache.js +25 -8
  5. data/app/assets/javascripts/gridx/modules/Bar.js +1 -2
  6. data/app/assets/javascripts/gridx/modules/Body.js +15 -7
  7. data/app/assets/javascripts/gridx/modules/CellWidget.js +8 -4
  8. data/app/assets/javascripts/gridx/modules/ColumnLock.js +12 -12
  9. data/app/assets/javascripts/gridx/modules/ColumnResizer.js +9 -10
  10. data/app/assets/javascripts/gridx/modules/Dod.js +1 -0
  11. data/app/assets/javascripts/gridx/modules/Edit.js +18 -15
  12. data/app/assets/javascripts/gridx/modules/Filter.js +7 -3
  13. data/app/assets/javascripts/gridx/modules/Focus.js +45 -36
  14. data/app/assets/javascripts/gridx/modules/GroupHeader.js +2 -1
  15. data/app/assets/javascripts/gridx/modules/HLayout.js +1 -0
  16. data/app/assets/javascripts/gridx/modules/HScroller.js +1 -0
  17. data/app/assets/javascripts/gridx/modules/Header.js +8 -1
  18. data/app/assets/javascripts/gridx/modules/HeaderMenu.js +1 -0
  19. data/app/assets/javascripts/gridx/modules/HeaderRegions.js +2 -1
  20. data/app/assets/javascripts/gridx/modules/IndirectSelect.js +7 -34
  21. data/app/assets/javascripts/gridx/modules/IndirectSelectColumn.js +4 -13
  22. data/app/assets/javascripts/gridx/modules/Menu.js +5 -1
  23. data/app/assets/javascripts/gridx/modules/NavigableCell.js +3 -1
  24. data/app/assets/javascripts/gridx/modules/NestedSort.js +4 -1
  25. data/app/assets/javascripts/gridx/modules/Pagination.js +1 -0
  26. data/app/assets/javascripts/gridx/modules/Persist.js +1 -0
  27. data/app/assets/javascripts/gridx/modules/RowHeader.js +11 -10
  28. data/app/assets/javascripts/gridx/modules/SingleSort.js +1 -0
  29. data/app/assets/javascripts/gridx/modules/SummaryBar.js +1 -0
  30. data/app/assets/javascripts/gridx/modules/ToolBar.js +3 -0
  31. data/app/assets/javascripts/gridx/modules/TouchScroll.js +1 -0
  32. data/app/assets/javascripts/gridx/modules/TouchVScroller.js +28 -5
  33. data/app/assets/javascripts/gridx/modules/Traverse.js +1 -0
  34. data/app/assets/javascripts/gridx/modules/Tree.js +2 -1
  35. data/app/assets/javascripts/gridx/modules/VLayout.js +1 -0
  36. data/app/assets/javascripts/gridx/modules/VScroller.js +22 -11
  37. data/app/assets/javascripts/gridx/modules/View.js +11 -6
  38. data/app/assets/javascripts/gridx/modules/VirtualVScroller.js +8 -4
  39. data/app/assets/javascripts/gridx/modules/dnd/Column.js +3 -4
  40. data/app/assets/javascripts/gridx/modules/dnd/Row.js +3 -4
  41. data/app/assets/javascripts/gridx/modules/dnd/_Dnd.js +1 -0
  42. data/app/assets/javascripts/gridx/modules/extendedSelect/Cell.js +4 -3
  43. data/app/assets/javascripts/gridx/modules/extendedSelect/Column.js +6 -7
  44. data/app/assets/javascripts/gridx/modules/extendedSelect/Row.js +33 -15
  45. data/app/assets/javascripts/gridx/modules/filter/FilterBar.js +9 -7
  46. data/app/assets/javascripts/gridx/modules/filter/FilterDialog.js +1 -1
  47. data/app/assets/javascripts/gridx/modules/filter/FilterPane.js +1 -1
  48. data/app/assets/javascripts/gridx/modules/filter/QuickFilter.js +1 -0
  49. data/app/assets/javascripts/gridx/modules/move/Column.js +2 -1
  50. data/app/assets/javascripts/gridx/modules/move/Row.js +2 -1
  51. data/app/assets/javascripts/gridx/modules/pagination/PaginationBar.js +1 -0
  52. data/app/assets/javascripts/gridx/modules/pagination/PaginationBarDD.js +2 -0
  53. data/app/assets/javascripts/gridx/modules/select/Cell.js +10 -7
  54. data/app/assets/javascripts/gridx/modules/select/Column.js +3 -2
  55. data/app/assets/javascripts/gridx/modules/select/Row.js +27 -13
  56. data/app/assets/javascripts/gridx/support/QuickFilter.js +7 -2
  57. data/lib/gridx-rails/version.rb +1 -1
  58. data/test/dummy/log/test.log +5 -0
  59. metadata +2 -2
@@ -7,6 +7,7 @@ define([
7
7
  /*=====
8
8
  return declare(_Module, {
9
9
  // summary:
10
+ // module name: pagination.
10
11
  // This module provides (logical) pagination functionality for grid.
11
12
  // description:
12
13
  // This module does not include any UI buttons for pagination, so that various
@@ -11,6 +11,7 @@ define([
11
11
  /*=====
12
12
  return declare(_Module, {
13
13
  // summary:
14
+ // module name: persist.
14
15
  // Provide a mechanism to persist various grid features when the grid is destroyed,
15
16
  // so that when a new grid with the same id (or the same persist key) is created,
16
17
  // all these features will be restored.
@@ -15,6 +15,7 @@ define([
15
15
  /*=====
16
16
  return declare(_Module, {
17
17
  // summary:
18
+ // module name: rowHeader.
18
19
  // This modules provides a header before each row.
19
20
  // description:
20
21
  // Row header can be used as a UI handler for row selection, especially when
@@ -151,15 +152,14 @@ define([
151
152
  visualIndex = row.visualIndex(),
152
153
  n = query('[visualindex="' + visualIndex + '"].gridxRowHeaderRow', t.bodyNode)[0],
153
154
  bn = t.grid.dod? query('[visualindex="' + visualIndex + '"].gridxRow', t.grid.bodyNode)[0] : query('[visualindex="' + visualIndex + '"].gridxRow .gridxRowTable', t.grid.bodyNode)[0],
154
- nt = n.firstChild,
155
155
  cp = t.arg('cellProvider');
156
156
  n.setAttribute('rowid', row.id);
157
157
  n.setAttribute('rowindex', row.index());
158
158
  n.setAttribute('parentid', t.model.treePath(row.id).pop() || '');
159
159
  if(cp){
160
- nt.firstChild.firstChild.firstChild.innerHTML = cp.call(t, row);
160
+ n.firstChild.firstChild.firstChild.firstChild.innerHTML = cp.call(t, row);
161
161
  }
162
- t._syncRowHeight(nt, bn);
162
+ t._syncRowHeight(n, bn);
163
163
  },
164
164
 
165
165
  _onAfterCell: function(cell){
@@ -168,7 +168,7 @@ define([
168
168
  visualIndex = cell.row.visualIndex(),
169
169
  n = query('[visualindex="' + visualIndex + '"].gridxRowHeaderRow', t.bodyNode)[0],
170
170
  bn = query('[visualindex="' + visualIndex + '"].gridxRow .gridxRowTable', t.grid.bodyNode)[0];
171
- t._syncRowHeight(n.firstChild, bn);
171
+ t._syncRowHeight(n, bn);
172
172
  },
173
173
 
174
174
  _syncRowHeight: function(rowHeaderNode, bodyNode){
@@ -183,9 +183,11 @@ define([
183
183
  function getHeight(){
184
184
  return has('ie') <= 8 || t._isCollapse ? bodyNode.offsetHeight + 'px' : domStyle.getComputedStyle(bodyNode).height;
185
185
  }
186
- rowHeaderNode.style.height = getHeight();
186
+ rowHeaderNode.style.height = rowHeaderNode.firstChild.style.height = getHeight();
187
187
  setTimeout(function(){
188
- rowHeaderNode.style.height = getHeight();
188
+ if(rowHeaderNode && rowHeaderNode.firstChild){
189
+ rowHeaderNode.style.height = rowHeaderNode.firstChild.style.height = getHeight();
190
+ }
189
191
  }, 0);
190
192
  },
191
193
 
@@ -251,10 +253,9 @@ define([
251
253
  for(var brn = this.grid.bodyNode.firstChild, n = this.bodyNode.firstChild;
252
254
  brn && n;
253
255
  brn = brn.nextSibling, n = n.nextSibling){
254
- var bn = this.grid.dod? brn : brn.firstChild;
255
- n.firstChild.style.height = ie > 8? domStyle.getComputedStyle(bn).height : bn.offsetHeight + 'px';
256
-
257
- // n.firstChild.style.height = ie > 8? domStyle.getComputedStyle(brn.firstChild).height : brn.firstChild.offsetHeight + 'px';
256
+ var bn = this.grid.dod ? brn : brn.firstChild;
257
+ var h = ie > 8 ? domStyle.getComputedStyle(bn).height : bn.offsetHeight + 'px';
258
+ n.style.height = n.firstChild.style.height = h;
258
259
  }
259
260
  var t = this,
260
261
  g = t.grid,
@@ -36,6 +36,7 @@ define([
36
36
 
37
37
  var SingleSort = declare(_Module, {
38
38
  // summary:
39
+ // module name: sort.
39
40
  // This module provides the single column sorting functionality for grid.
40
41
 
41
42
  // initialOrder: Object|Array
@@ -8,6 +8,7 @@ define([
8
8
  /*=====
9
9
  return declare(_Module, {
10
10
  // summary:
11
+ // module name: summaryBar.
11
12
  // Add summary bar to the bottom of grid.
12
13
  // description:
13
14
  // Add summary based on Bar module. This module is only for conveniency and backward compatibility.
@@ -9,15 +9,18 @@ define([
9
9
  /*=====
10
10
  return declare(_Module, {
11
11
  // summary:
12
+ // module name: toolBar.
12
13
  // Add toolbar on top of grid.
13
14
  // description:
14
15
  // Add toolbar based on Bar module. This module is only for conveniency and backward compatibility.
15
16
  // Using Bar module directly is recommended.
16
17
 
17
18
  // widget: [readonly] Object
19
+ //
18
20
  widget: null,
19
21
 
20
22
  // domNode: [readonly] HTMLElement
23
+ //
21
24
  domNode: null
22
25
  });
23
26
  =====*/
@@ -11,6 +11,7 @@ define([
11
11
  /*=====
12
12
  return declare(_Module, {
13
13
  // summary:
14
+ // module name: touchScroll.
14
15
  // Make desktop grid scrollable by touch in mobile devices.
15
16
  // description:
16
17
  // No bouncing and sliding effect now.
@@ -13,6 +13,7 @@ define([
13
13
  /*=====
14
14
  return declare(VScroller, {
15
15
  // summary:
16
+ // module name: vScroller.
16
17
  // A vertical scroller only for touch devices.
17
18
  // description:
18
19
  // Using dojox/mobile/scrollable, and no lazy-rendering (all rows are rendered out).
@@ -20,8 +21,15 @@ define([
20
21
  =====*/
21
22
 
22
23
  return declare(VScroller, {
24
+ constructor: function(){
25
+ if(has('ios') || has('android') || this.arg('touch')){
26
+ domClass.add(this.grid.domNode, 'gridxTouchVScroller');
27
+ this.domNode.style.width = '';
28
+ }
29
+ },
30
+
23
31
  scrollToRow: function(rowVisualIndex, toTop){
24
- if(has('ios') || has('android')){
32
+ if(has('ios') || has('android') || this.arg('touch')){
25
33
  var d = new Deferred(),
26
34
  rowNode = query('[visualindex="' + rowVisualIndex + '"]', this.grid.bodyNode)[0];
27
35
  if(rowNode){
@@ -34,8 +42,24 @@ define([
34
42
  return this.inherited(arguments);
35
43
  },
36
44
 
45
+ scroll: function(top){
46
+ if(has('ios') || has('android') || this.arg('touch')){
47
+ this._scrollable.scrollTo({ y: top });
48
+ }else{
49
+ this.inherited(arguments);
50
+ }
51
+ },
52
+
53
+ position: function(){
54
+ if(has('ios') || has('android') || this.arg('touch')){
55
+ return this._scrollable.getPos().y;
56
+ }else{
57
+ return this.inherited(arguments);
58
+ }
59
+ },
60
+
37
61
  _init: function(){
38
- if(has('ios') || has('android')){
62
+ if(has('ios') || has('android') || this.arg('touch')){
39
63
  var t = this,
40
64
  g = t.grid,
41
65
  view = g.view,
@@ -44,7 +68,6 @@ define([
44
68
  bodyNode = g.bodyNode,
45
69
  headerTable = h.firstChild,
46
70
  scrollable = t._scrollable = new Scrollable();
47
- domClass.add(g.domNode, 'gridxTouchVScroller');
48
71
  h.style.height = headerTable.offsetHeight + 'px';
49
72
  scrollable.init({
50
73
  domNode: mainNode,
@@ -69,12 +92,12 @@ define([
69
92
  });
70
93
  t.aspect(g.hScroller, 'refresh', function(){
71
94
  scrollable._h = bodyNode.scrollWidth > mainNode.clientWidth;
72
- scrollable._v = bodyNode.scrollHeight > mainNode.clientHeight;
95
+ // scrollable._v = bodyNode.scrollHeight > mainNode.clientHeight;
73
96
  });
74
97
  t._onBodyChange = function(){
75
98
  t._update();
76
99
  };
77
- t._onForcedScroll = function(){};
100
+ // t._onForcedScroll = function(){};
78
101
  t.model.when({
79
102
  start: view.rootStart,
80
103
  count: view.rootCount
@@ -82,6 +82,7 @@ define([
82
82
 
83
83
  return declare(_Module, {
84
84
  // summary:
85
+ // module name: traverse.
85
86
  // Provides some useful functions to traverse among rows/columns/cells.
86
87
  });
87
88
  =====*/
@@ -55,6 +55,7 @@ define([
55
55
 
56
56
  var Tree = declare(_Module, {
57
57
  // summary:
58
+ // module name: tree.
58
59
  // This module manages row expansion/collapsing in tree grid.
59
60
  // description:
60
61
  // To use tree grid, the store must have 2 extra methods: hasChildren and getChildren.
@@ -633,7 +634,7 @@ define([
633
634
  });
634
635
  });
635
636
  }
636
- }else if(e.ctrlKey && isExpando(e.cellNode)){
637
+ }else if(t.grid._isCtrlKey(e) && isExpando(e.cellNode)){
637
638
  var ltr = t.grid.isLeftToRight();
638
639
  if(e.keyCode == (ltr ? keys.LEFT_ARROW : keys.RIGHT_ARROW) && t.isExpanded(e.rowId)){
639
640
  t.collapse(e.rowId);
@@ -7,6 +7,7 @@ define([
7
7
  /*=====
8
8
  return declare(_Module, {
9
9
  // summary:
10
+ // module name: vLayout.
10
11
  // This module manages the vertical layout of all the grid UI parts.
11
12
  // description:
12
13
  // When user creates a grid with a given height, it means the height of the whole grid,
@@ -15,6 +15,7 @@ define([
15
15
  /*=====
16
16
  return declare(_Module, {
17
17
  // summary:
18
+ // module name: vScroller.
18
19
  // This module provides basic vertical scrolling logic for grid.
19
20
  // description:
20
21
  // This module will make the grid body render all rows without paging.
@@ -57,7 +58,7 @@ define([
57
58
  if(has('ie') < 8){
58
59
  dn.style.width = '0px';
59
60
  }
60
- }else{
61
+ }else if(!has('mac')){
61
62
  var w = metrics.getScrollbar().w,
62
63
  ltr = g.isLeftToRight();
63
64
  dn.style.width = w + 'px';
@@ -65,8 +66,7 @@ define([
65
66
  if(has('ie') < 8){
66
67
  t.stubNode.style.width = (w + 1) + 'px';
67
68
  }
68
- }
69
- if(has('mac')){
69
+ }else{
70
70
  domClass.add(g.domNode, 'gridxMac');
71
71
  }
72
72
  },
@@ -143,6 +143,14 @@ define([
143
143
  finish(!!n);
144
144
  return d;
145
145
  },
146
+
147
+ scroll: function(top){
148
+ this.domNode.scrollTop = top;
149
+ },
150
+
151
+ position: function(){
152
+ return this.domNode.scrollTop;
153
+ },
146
154
 
147
155
  //Protected -------------------------------------------------
148
156
  _init: function(){
@@ -173,11 +181,10 @@ define([
173
181
  }else{
174
182
  ds.width = '';
175
183
  }
176
- var display = toShow ? '' : 'none';
177
- var changed = display != domStyle.get(t.domNode, 'display');
184
+ var display = toShow ? 'block' : 'none';
185
+ var changed = display != (domStyle.get(t.domNode, 'display') || 'block');
178
186
  ds.display = display;
179
- if(changed){
180
- t._updatePos();
187
+ if(t._updatePos() || changed){
181
188
  g.hLayout.reLayout();
182
189
  }
183
190
  }
@@ -188,8 +195,11 @@ define([
188
195
  dn = this.domNode,
189
196
  ds = dn.style,
190
197
  ltr = g.isLeftToRight(),
191
- mainBorder = domGeo.getBorderExtents(g.mainNode);
192
- ds[ltr ? 'right' : 'left'] = -(dn.offsetWidth + (ltr ? mainBorder.r : mainBorder.l)) + 'px';
198
+ mainBorder = domGeo.getBorderExtents(g.mainNode),
199
+ attr = ltr ? 'right' : 'left';
200
+ oldValue = ds[attr];
201
+ ds[attr] = -(dn.offsetWidth + (ltr ? mainBorder.r : mainBorder.l)) + 'px';
202
+ return oldValue != ds[attr];
193
203
  },
194
204
 
195
205
  _doScroll: function(){
@@ -240,13 +250,14 @@ define([
240
250
  bn = g.bodyNode,
241
251
  focus = g.focus,
242
252
  sn = t.domNode,
253
+ ctrlKey = g._isCtrlKey(evt),
243
254
  rowNode;
244
255
  if(bn.childNodes.length && (!focus || focus.currentArea() == 'body')){
245
- if(evt.keyCode == keys.HOME && evt.ctrlKey){
256
+ if(evt.keyCode == keys.HOME && ctrlKey){
246
257
  sn[st] = 0;
247
258
  rowNode = bn.firstChild;
248
259
  bd._focusCellCol = 0;
249
- }else if(evt.keyCode == keys.END && evt.ctrlKey){
260
+ }else if(evt.keyCode == keys.END && ctrlKey){
250
261
  sn[st] = sn.scrollHeight - sn.offsetHeight;
251
262
  rowNode = bn.lastChild;
252
263
  bd._focusCellCol = g._columns.length - 1;
@@ -18,6 +18,7 @@ define([
18
18
 
19
19
  var View = declare(_Module, {
20
20
  // summary:
21
+ // module name: view.
21
22
  // Manages how many and what rows should be shown in the current grid body.
22
23
  // description:
23
24
  // This module defines a key concept: visual index, which is the position of a row in current grid body.
@@ -150,7 +151,7 @@ define([
150
151
  t._clear();
151
152
  t.aspect(m, 'onSizeChange', '_onSizeChange');
152
153
  t.aspect(m, 'onDelete', '_onDelete');
153
- t.aspect(g, 'setStore', function(){
154
+ t.aspect(m, 'setStore', function(){
154
155
  //If server store changes without notifying grid, expanded rows should remain expanded.
155
156
  if(t.arg('clearOnSetStore')){
156
157
  t._clear();
@@ -458,9 +459,7 @@ define([
458
459
  });
459
460
  }
460
461
  };
461
- m.when({}, function(){
462
- fetchLevel(0);
463
- });
462
+ fetchLevel(0);
464
463
  return d;
465
464
  },
466
465
 
@@ -529,12 +528,18 @@ define([
529
528
  info.count -= count;
530
529
  info = openInfo[info.parentId];
531
530
  }
532
- t.visualCount -= count;
531
+ if(parentId === '' && rowIndex >= t.rootStart && rowIndex < t.rootStart + t.rootCount){
532
+ t.rootCount--;
533
+ }
534
+ var rootIndex = model.idToIndex(model.rootId(rowId));
535
+ if(rootIndex >= t.rootStart && rootIndex < t.rootStart + t.rootCount){
536
+ t.visualCount -= count;
537
+ }
533
538
  }else{
534
539
  //FIXME: what to do if some unknown row is deleted?
535
540
  this._clear();
536
- this.grid.body.lazyRefresh();
537
541
  }
542
+ this.grid.body.lazyRefresh();
538
543
  }
539
544
  });
540
545
  });
@@ -14,6 +14,7 @@ define([
14
14
  /*=====
15
15
  return declare(VScroller, {
16
16
  // summary:
17
+ // module name: vScroller.
17
18
  // This module implements lazy-rendering when virtically scrolling grid.
18
19
  // description:
19
20
  // This module takes a DOMNode-based way to implement lazy-rendering.
@@ -183,6 +184,7 @@ define([
183
184
 
184
185
  _init: function(args){
185
186
  var t = this;
187
+ t._avgRowHeight = t.grid.body.arg('defaultRowHeight') || 24;
186
188
  t._rowHeight = {};
187
189
  t._syncHeight();
188
190
  t.connect(t.grid, '_onResizeEnd', function(){
@@ -349,11 +351,12 @@ define([
349
351
  }
350
352
  var dn = t.domNode,
351
353
  //remember the scroll bar position
352
- r = dn.scrollTop / dn.scrollHeight;
354
+ oldScrollTop = dn.scrollTop;
353
355
  t.stubNode.style.height = h + 'px';
354
356
  //Update last scrolltop, to avoid firing _doVirtualScroll with incorrect delta.
355
357
  if(t._lastScrollTop){
356
- t._lastScrollTop = dn.scrollTop = dn.scrollHeight * r;
358
+ dn.scrollTop = oldScrollTop;
359
+ t._lastScrollTop = dn.scrollTop;
357
360
  }
358
361
  },
359
362
 
@@ -415,16 +418,17 @@ define([
415
418
  view = t.grid.view,
416
419
  focus = t.grid.focus,
417
420
  sn = t.domNode,
421
+ ctrlKey = t.grid._isCtrlKey(evt),
418
422
  st = 'scrollTop',
419
423
  r,
420
424
  fc = '_focusCellRow';
421
425
  if(!focus || focus.currentArea() == 'body'){
422
- if(evt.keyCode == keys.HOME && evt.ctrlKey){
426
+ if(evt.keyCode == keys.HOME && ctrlKey){
423
427
  bd._focusCellCol = 0;
424
428
  bd[fc] = 0;
425
429
  sn[st] = 0;
426
430
  bd._focusCell();
427
- }else if(evt.keyCode == keys.END && evt.ctrlKey){
431
+ }else if(evt.keyCode == keys.END && ctrlKey){
428
432
  bd._focusCellCol = t.grid._columns.length - 1;
429
433
  bd[fc] = view.visualCount - 1;
430
434
  sn[st] = t.stubNode.clientHeight - bd.domNode.offsetHeight;
@@ -11,6 +11,7 @@ define([
11
11
  /*=====
12
12
  return declare(_Base, {
13
13
  // summary:
14
+ // module name: dndColumn.
14
15
  // This module provides an implementation of column drag & drop.
15
16
  // description:
16
17
  // This module supports column reordering within grid, dragging out of grid, and dragging into grid.
@@ -104,13 +105,11 @@ define([
104
105
  },
105
106
 
106
107
  _onBeginAutoScroll: function(){
107
- var autoScroll = this.grid.autoScroll;
108
- this._autoScrollV = autoScroll.vertical;
109
- autoScroll.vertical = false;
108
+ this.grid.autoScroll.vertical = false;
110
109
  },
111
110
 
112
111
  _onEndAutoScroll: function(){
113
- this.grid.autoScroll.vertical = this._autoScrollV;
112
+ this.grid.autoScroll.vertical = true;
114
113
  },
115
114
 
116
115
  _getItemData: function(id){
@@ -13,6 +13,7 @@ define([
13
13
  /*=====
14
14
  return declare(_Base, {
15
15
  // summary:
16
+ // module name: dndRow.
16
17
  // This module provides an implementation of row drag & drop.
17
18
  // description:
18
19
  // This module supports row reordering within grid, dragging out of grid, and dragging into grid.
@@ -140,13 +141,11 @@ define([
140
141
  },
141
142
 
142
143
  _onBeginAutoScroll: function(){
143
- var autoScroll = this.grid.autoScroll;
144
- this._autoScrollH = autoScroll.horizontal;
145
- autoScroll.horizontal = false;
144
+ this.grid.autoScroll.horizontal = false;
146
145
  },
147
146
 
148
147
  _onEndAutoScroll: function(){
149
- this.grid.autoScroll.horizontal = this._autoScrollH;
148
+ this.grid.autoScroll.horizontal = true;
150
149
  },
151
150
 
152
151
  _getItemData: function(id){