我有一个标签功能,如:
private function formatDate (item:Object, column:DataGridColumn):String { var df:DateFormatter = new DateFormatter(); df.formatString = "MM/DD/YY"; if (column.dataField == "startDate") { return df.format(item.startDate); } return "ERR"; }
我通过使用在数据库中使用的labelFunction
.
如果我的数据字段被称为'startDate',这可以正常工作.我想让这个函数通用,所以我可以在任何地方使用它.
我怎样才能做到这一点.我想我需要使用某种"反思" - 或者完全是另一种方法?
您可以使用列的dataField属性将函数设置为generic,作为项目的键.
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); }
-ben
你可以定义另一个函数,让我们调用它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
在参数列表中添加了一个名为first 的新参数,并用该参数替换了对"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); }
田田!