mirror of
https://github.com/DataTables/DataTables.git
synced 2025-01-18 11:52:11 +01:00
Fix: fnUpdate recursion would cause an error if dealing with nested arrays - 7292. Fix is to let the function know, with a private variable, that it is being called recursively.
This commit is contained in:
parent
42567c9968
commit
30a437d80e
12
media/js/jquery.dataTables.js
vendored
12
media/js/jquery.dataTables.js
vendored
@ -1930,25 +1930,30 @@
|
|||||||
var iRow = (typeof mRow == 'object') ?
|
var iRow = (typeof mRow == 'object') ?
|
||||||
_fnNodeToDataIndex(oSettings, mRow) : mRow;
|
_fnNodeToDataIndex(oSettings, mRow) : mRow;
|
||||||
|
|
||||||
if ( $.isArray(mData) && typeof mData == 'object' )
|
if ( typeof oSettings.__fnUpdateDeep == 'undefined' && $.isArray(mData) && typeof mData == 'object' )
|
||||||
{
|
{
|
||||||
/* Array update - update the whole row */
|
/* Array update - update the whole row */
|
||||||
oSettings.aoData[iRow]._aData = mData.slice();
|
oSettings.aoData[iRow]._aData = mData.slice();
|
||||||
|
|
||||||
|
/* Flag to the function that we are recursing */
|
||||||
|
oSettings.__fnUpdateDeep = true;
|
||||||
for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
|
for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
|
||||||
{
|
{
|
||||||
this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
|
this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
|
||||||
}
|
}
|
||||||
|
oSettings.__fnUpdateDeep = undefined;
|
||||||
}
|
}
|
||||||
else if ( mData !== null && typeof mData == 'object' )
|
else if ( typeof oSettings.__fnUpdateDeep == 'undefined' && mData !== null && typeof mData == 'object' )
|
||||||
{
|
{
|
||||||
/* Object update - update the whole row - assume the developer gets the object right */
|
/* Object update - update the whole row - assume the developer gets the object right */
|
||||||
oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
|
oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
|
||||||
|
|
||||||
|
oSettings.__fnUpdateDeep = true;
|
||||||
for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
|
for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
|
||||||
{
|
{
|
||||||
this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
|
this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
|
||||||
}
|
}
|
||||||
|
oSettings.__fnUpdateDeep = undefined;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2290,6 +2295,7 @@
|
|||||||
*/
|
*/
|
||||||
this.$ = function ( sSelector )
|
this.$ = function ( sSelector )
|
||||||
{
|
{
|
||||||
|
// xxx - filtering, sorting, column visibility options
|
||||||
var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]);
|
var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]);
|
||||||
return $(this.oApi._fnGetTrNodes(oSettings)).filter(sSelector);
|
return $(this.oApi._fnGetTrNodes(oSettings)).filter(sSelector);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user