Можно определить другую функцию, давайте назовем ее partial
это связывает некоторые дополнительные аргументы Вашей функции:
function partial( func : Function, ...boundArgs ) : Function {
return function( ...dynamicArgs ) : * {
return func.apply(null, boundArgs.concat(dynamicArgs))
}
}
Затем Вы изменяете свою функцию как это:
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";
}
Заметьте, что я добавил новый названный аргумент dataField
сначала в списке аргументов, и замененный все ссылки на "startDate" с тем аргументом.
И используйте его как это:
var startDateLabelFunction : Function = partial(formatDate, "startDate");
var endDateLabelFunction : Function = partial(formatDate, "endDate");
partial
функционируйте возвращает новую функцию, которая вызывает исходную функцию с параметрами от вызова до частичного, связанного с параметрами к новой функции... Вы со мной? Другой способ поместить его состоит в том, что это может возвратить новую функцию, где N аргументов предварительно связываются с определенными значениями.
Давайте пройдем его шаг за шагом:
partial(formatDate, "startDate")
возвращает функцию, которая похожа на это:
function( ...dynamicArgs ) : * {
return func.apply(null, boundArgs.concat(dynamicArgs));
}
но func
и boundArgs
то, чему Вы передали как аргументы partial
, таким образом, Вы могли сказать, что это похоже на это:
function( ...dynamicArgs ) : * {
return formatDate.apply(null, ["startDate"].concat(dynamicArgs));
}
который, когда это назовут, будет более или менее тем же как этим
function( item : Object, column : DataGridColumn ) : * {
return formatDate("startDate", item, column);
}
Tada!
Вы можете сделать функцию универсальной, используя атрибут dataField столбца в качестве ключа вашего элемента.
private function formatDate (item:Object, column:DataGridColumn):String
{
var df:DateFormatter = new DateFormatter();
df.formatString = "MM/DD/YY";
var value:object = item[column.dataField];
return df.format(value);
}
- Бен