1
0
mirror of https://github.com/DataTables/DataTables.git synced 2024-11-29 11:24:10 +01:00

Internal - altering how a draw is called

- Previously the master sort and filter functions would perform a draw,
  but this was a bit redundant, complex and didn't allow multiple
  changes to be queued up before a new draw was performed. The new API
  will allow this ability, so we need to allow it in the core as well.
  You can now do a sort, and it will be performed internally, but not
  actually drawn until the redraw function is called. This makes a full
  redraw much simpiler, and has the benefit that a standing redraw is
  now relatively trivial since it is all performed in a single place.
This commit is contained in:
Allan Jardine 2013-04-20 10:18:52 +01:00
parent e014d9272f
commit edfbf7491d
6 changed files with 40 additions and 62 deletions

View File

@ -718,6 +718,11 @@ this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseIns
} );
_fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
}
// tmp hack during transition to new API
oSettings._iDisplayStart = 0;
_fnCalculateEnd( oSettings );
_fnDraw( oSettings );
};
@ -1163,7 +1168,7 @@ this.fnSort = function( aaSort )
{
var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
oSettings.aaSorting = aaSort;
_fnSort( oSettings );
_fnReDraw( oSettings );
};

View File

@ -496,25 +496,35 @@ function _fnDraw( oSettings )
/**
* Redraw the table - taking account of the various features which are enabled
* @param {object} oSettings dataTables settings object
* @param {boolean} [holdPosition] Keep the current paging position. By default
* the paging is reset to the first page
* @memberof DataTable#oApi
*/
function _fnReDraw( oSettings )
function _fnReDraw( settings, holdPosition )
{
if ( oSettings.oFeatures.bSort )
{
/* Sorting will refilter and draw for us */
_fnSort( oSettings, oSettings.oPreviousSearch );
var
features = settings.oFeatures,
sort = features.bSort,
filter = features.bFilter;
if ( sort ) {
_fnSort( settings );
}
else if ( oSettings.oFeatures.bFilter )
{
/* Filtering will redraw for us */
_fnFilterComplete( oSettings, oSettings.oPreviousSearch );
if ( filter ) {
_fnFilterComplete( settings, settings.oPreviousSearch );
}
else
{
_fnCalculateEnd( oSettings );
_fnDraw( oSettings );
else {
// No filtering, so we want to just use the display master
settings.aiDisplay = settings.aiDisplayMaster.slice();
}
if ( holdPosition === false ) {
settings._iDisplayStart = 0;
}
_fnCalculateEnd( settings );
_fnDraw( settings );
}

View File

@ -51,6 +51,11 @@ function _fnFeatureHtmlFilter ( oSettings )
"bSmart": oPreviousSearch.bSmart ,
"bCaseInsensitive": oPreviousSearch.bCaseInsensitive
} );
// Need to redraw, without resorting
oSettings._iDisplayStart = 0;
_fnCalculateEnd( oSettings );
_fnDraw( oSettings );
}
} );
@ -113,13 +118,7 @@ function _fnFilterComplete ( oSettings, oInput, iForce )
/* Tell the draw function we have been filtering */
oSettings.bFiltered = true;
$(oSettings.oInstance).trigger('filter', oSettings);
/* Redraw the table */
oSettings._iDisplayStart = 0;
_fnCalculateEnd( oSettings );
_fnDraw( oSettings );
/* Rebuild search array 'offline' */
_fnBuildSearchArray( oSettings, 0 );
}

View File

@ -48,20 +48,7 @@ function _fnInitialise ( oSettings )
* drawing for us. Otherwise we draw the table regardless of the Ajax source - this allows
* the table to look initialised for Ajax sourcing data (show 'loading' message possibly)
*/
if ( oSettings.oFeatures.bSort )
{
_fnSort( oSettings );
}
else if ( oSettings.oFeatures.bFilter )
{
_fnFilterComplete( oSettings, oSettings.oPreviousSearch );
}
else
{
oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
_fnCalculateEnd( oSettings );
_fnDraw( oSettings );
}
_fnReDraw( oSettings );
/* if there is an ajax source load the data */
if ( (oSettings.sAjaxSource || oSettings.ajax) && !oSettings.oFeatures.bServerSide )
@ -81,16 +68,7 @@ function _fnInitialise ( oSettings )
*/
oSettings.iInitDisplayStart = iAjaxStart;
if ( oSettings.oFeatures.bSort )
{
_fnSort( oSettings );
}
else
{
oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
_fnCalculateEnd( oSettings );
_fnDraw( oSettings );
}
_fnReDraw( oSettings );
_fnProcessingDisplay( oSettings, false );
_fnInitComplete( oSettings, json );

View File

@ -103,7 +103,7 @@ function _fnPageChange ( settings, action )
_fnLog( settings, 0, "Unknown paging action: "+action );
}
var changed = settings._iDisplayStart === start;
var changed = settings._iDisplayStart !== start;
settings._iDisplayStart = start;
$(settings.oInstance).trigger('page', settings);

View File

@ -230,20 +230,6 @@ function _fnSort ( oSettings, bApplyClasses )
/* Tell the draw function that we have sorted the data */
oSettings.bSorted = true;
$(oSettings.oInstance).trigger('sort', oSettings);
/* Copy the master data into the draw array and re-draw */
if ( oSettings.oFeatures.bFilter )
{
/* _fnFilter() will redraw the table for us */
_fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
}
else
{
oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
oSettings._iDisplayStart = 0; /* reset display back to page 0 */
_fnCalculateEnd( oSettings );
_fnDraw( oSettings );
}
}
@ -337,8 +323,8 @@ function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback )
}
}
/* Run the sort */
_fnSort( oSettings );
/* Run the sort by calling a full redraw */
_fnReDraw( oSettings );
}; /* /fnInnerSorting */
if ( !oSettings.oFeatures.bProcessing )