Vous pouvez définir une autre fonction, appelons-la partial
qui lie des arguments supplémentaires à votre fonction :
function partial( func : Function, ...boundArgs ) : Function {
return function( ...dynamicArgs ) : * {
return func.apply(null, boundArgs.concat(dynamicArgs))
}
}
Ensuite, vous modifiez votre fonction comme ceci :
private function formatDate( dataField : String, item : Object, column : DataGridColumn ) : String {
var df : DateFormatter = new DateFormatter();
df.formatString = "MM/DD/YY";
if ( column.dataField == dataField ) {
return df.format(item[dataField]);
}
return "ERR";
}
Remarquez que j'ai ajouté un nouvel argument appelé dataField
en premier dans la liste des arguments, et a remplacé toutes les références à "startDate" par cet argument.
Et utilise-le comme ça :
var startDateLabelFunction : Function = partial(formatDate, "startDate");
var endDateLabelFunction : Function = partial(formatDate, "endDate");
En partial
renvoie une nouvelle fonction qui appelle la fonction originale avec les paramètres de l'appel au partiel concaténés avec les paramètres de la nouvelle fonction... vous me suivez ? Une autre façon de le dire est qu'il peut retourner une nouvelle fonction où N des arguments sont pré-liés à des valeurs spécifiques.
Voyons cela étape par étape :
partial(formatDate, "startDate")
renvoie une fonction qui ressemble à ceci :
function( ...dynamicArgs ) : * {
return func.apply(null, boundArgs.concat(dynamicArgs));
}
mais le func
y boundArgs
sont ce que vous avez passé comme arguments à partial
On peut donc dire que ça ressemble à ça :
function( ...dynamicArgs ) : * {
return formatDate.apply(null, ["startDate"].concat(dynamicArgs));
}
qui, lorsqu'elle sera appelée, sera plus ou moins la même que celle-ci
function( item : Object, column : DataGridColumn ) : * {
return formatDate("startDate", item, column);
}
Tada !