Vous pouvez définir une autre fonction, appelons-le partial
qui lie certains arguments supplémentaires à votre fonction:
function partial(func : Function, ...boundArgs) : Function {
return function(...dynamicArgs) : * {
return func.apply(null, boundArgs.concat(dynamicArgs))
}
}
Ensuite, vous changez 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";
}
Notez que j'ai ajouté un nouvel argument appelé dataField
en premier dans la liste des arguments, et remplacé toutes les références à "startDate" avec cet argument.
Et l'utiliser comme ceci:
var startDateLabelFunction : Function = partial(formatDate, "startDate");
var endDateLabelFunction : Function = partial(formatDate, "endDate");
La fonction retourne partial
une nouvelle fonction qui appelle la fonction originale avec les paramètres de l'appel à concaténés partielle avec les paramètres de la nouvelle fonction ... vous avec moi? 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.
Parcourons étape par étape:
partial(formatDate, "startDate")
retourne une fonction qui ressemble à ceci:
function(...dynamicArgs) : * {
return func.apply(null, boundArgs.concat(dynamicArgs));
}
mais le func
et boundArgs
sont ce que vous avez passé comme arguments à partial
, donc on peut dire cela ressemble à ceci:
function(...dynamicArgs) : * {
return formatDate.apply(null, ["startDate"].concat(dynamicArgs));
}
qui, quand il est appelé, sera plus ou moins le identique à celui-ci
function(item : Object, column : DataGridColumn) : * {
return formatDate("startDate", item, column);
}
Tada!
Cela devrait vraiment être la réponse. Et vous pouvez même le rendre 'public static' dans une classe util (par exemple' GridUtils') et l'utiliser partout dans votre application (par exemple 'labelFunction =" GridUtils.formatDate "') –
Ceci est une bonne réponse. L'autre est plutôt compliqué. Sauf que je viens juste de retourner df.format (item [column.dataField]); – Fletch