function(index) {
        var range = this._visibleRange(),
            dm    = this.metrics().rowDimensions(index),
            maxY  = dm.top + dm.height,
            minY  = dm.top;

        if (maxY >= range.to) {
            this.scrollableParent().scroll(0, maxY - range.to +
                // hackish overflow to compensate for bottom scroll bar
                (index === this.data().length - 1 ? 100 : 0)
            );
        } else if (minY < range.from) {
            this.scrollableParent().scroll(0, minY - range.from);
        }
        this._wrappedUpdate();
        return this;
    }
function(index) {
        var range = this._visibleRange(),
            dm    = this.metrics().rowDimensions(index),
            maxY  = dm.top + dm.height,
            minY  = dm.top;

        if (maxY >= range.to) {
            this.scrollableParent().scroll(0, maxY - range.to +
                
                (index === this.data().length - 1 ? 100 : 0)
            );
        } else if (minY < range.from) {
            this.scrollableParent().scroll(0, minY - range.from);
        }
        this._wrappedUpdate();
        return this;
    }
function ( index ) { var range = this . _visibleRange ( ) , dm = this . metrics ( ) . rowDimensions ( index ) , maxY = dm . top + dm . height , minY = dm . top ; if ( maxY >= range . to ) { this . scrollableParent ( ) . scroll ( 0 , maxY - range . to + // hackish overflow to compensate for bottom scroll bar ( index === this . data ( ) . length - 1 ? 100 : 0 ) ) ; } else if ( minY < range . from ) { this . scrollableParent ( ) . scroll ( 0 , minY - range . from ) ; } this . _wrappedUpdate ( ) ; return this ; }
Scroll the parent so row at position gets into view
Scroll the parent so row at position gets into view