Scroller with bStateSave/bServerSide/sAjaxSource
Scroller with bStateSave/bServerSide/sAjaxSource
The scroll position isn't restored from bStateSave when using dataTables 1.9.4 with scroller 1.1.0 or 1.1.1.dev.
In the following code from scroller's _fnDrawCallback, the function is only called once and has an iDraw of 1. So the setTimeout portion never executes. Not sure if this is due to bServerSide or some change that caused only one draw to occur, but changing this if to just (this.s.dt.iDraw == 1) fixed the problem for me and I've seen no side effects so far.
The info does briefly start as 1 to x before flashing to the correct value. Perhaps it needs some type of check to have it not display until after the ajax call?
[code]
/* Restore the scrolling position that was saved by DataTable's state saving
* Note that this is done on the second draw when data is Ajax sourced, and the
* first draw when DOM soured
*/
if ( this.s.dt.oFeatures.bStateSave && this.s.dt.oLoadedState !== null &&
typeof this.s.dt.oLoadedState.iScroller != 'undefined' )
{
if ( (this.s.dt.sAjaxSource !== null && this.s.dt.iDraw == 2) ||
(this.s.dt.sAjaxSource === null && this.s.dt.iDraw == 1) )
{
setTimeout( function () {
$(that.dom.scroller).scrollTop( that.s.dt.oLoadedState.iScroller );
that.s.redrawTop = that.s.dt.oLoadedState.iScroller - (that.s.viewportHeight/2);
}, 0 );
}
}
[/code]
In the following code from scroller's _fnDrawCallback, the function is only called once and has an iDraw of 1. So the setTimeout portion never executes. Not sure if this is due to bServerSide or some change that caused only one draw to occur, but changing this if to just (this.s.dt.iDraw == 1) fixed the problem for me and I've seen no side effects so far.
The info does briefly start as 1 to x before flashing to the correct value. Perhaps it needs some type of check to have it not display until after the ajax call?
[code]
/* Restore the scrolling position that was saved by DataTable's state saving
* Note that this is done on the second draw when data is Ajax sourced, and the
* first draw when DOM soured
*/
if ( this.s.dt.oFeatures.bStateSave && this.s.dt.oLoadedState !== null &&
typeof this.s.dt.oLoadedState.iScroller != 'undefined' )
{
if ( (this.s.dt.sAjaxSource !== null && this.s.dt.iDraw == 2) ||
(this.s.dt.sAjaxSource === null && this.s.dt.iDraw == 1) )
{
setTimeout( function () {
$(that.dom.scroller).scrollTop( that.s.dt.oLoadedState.iScroller );
that.s.redrawTop = that.s.dt.oLoadedState.iScroller - (that.s.viewportHeight/2);
}, 0 );
}
}
[/code]
This discussion has been closed.
Replies
This change looks good to me. I'll test it out a bit and merge it in later on :-)
Thanks for posting this!
Allan