2010-12-06 20 views
2

J'ai une récursif javascript simple fonction qui peut être appelée avec des arguments supplémentaires:Javascript slice.call (arguments) et récursion

AllDataRows(grid.Rows, process); 
AllDataRows(grid.Rows, process, storeIDs); 

Le problème est que si la fonction doit s'appeler alors des arguments supplémentaires sont perdu. J'ai essayé d'utiliser Array.prototype.slice.call(arguments, 2) pour transmettre les arguments, mais ils se terminent par un tableau d'éléments. La fonction cb échoue alors car elle n'attend pas de tableau (ce serait une zone de texte cachée).

Comment puis-je résoudre ce problème?

Merci

function AllDataRows(rowList, cb) { 
    if (rowList.getRow(0).GroupByRow) { 
    for (var i = 0; i < rowList.length; i++) 
     AllDataRows(rowList.getRow(i).Rows, cb); 
    } else { 
    var args = Array.prototype.slice.call(arguments, 2); 
    for (var j = 0; j < rowList.length; j++) 
     cb.apply(rowList.getRow(j), args); 
    } 
} 

Répondre

3
function AllDataRows(rowList, cb) { 
    if (rowList.getRow(0).GroupByRow) { 
    for (var i = 0; i < rowList.length; i++) { 
     var aa = Array.prototype.slice.call(arguments, 0); 
     aa[0] = rowList.getRow(1).Rows; 
     AllDataRows.apply(this, aa); 
    } 
    } else { 
    var args = Array.prototype.slice.call(arguments, 2); 
    for (var j = 0; j < rowList.length; j++) 
     cb.apply(rowList.getRow(j), args); 
    } 
} 

Il suffit d'utiliser apply lorsque vous faites l'appel récursif, la fixation de tableau d'arguments pour tenir compte du sous-groupe vous ouvrir.

+0

Doh! Nice et simple. Merci. – user497075