如何为Flex Datagrid创建可重用的labelFunction?

前端之家收集整理的这篇文章主要介绍了如何为Flex Datagrid创建可重用的labelFunction?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个标签功能,如:
  1. private function formatDate (item:Object,column:DataGridColumn):String
  2. {
  3. var df:DateFormatter = new DateFormatter();
  4. df.formatString = "MM/DD/YY";
  5.  
  6. if (column.dataField == "startDate") {
  7. return df.format(item.startDate);
  8. }
  9.  
  10. return "ERR";
  11. }

我使用labelFunction在数据列中使用它.

如果我的数据字段被称为’startDate’,这可以正常工作.我想让这个函数通用,所以我可以在任何地方使用它.

我怎样才能做到这一点.我想我需要使用某种“反思” – 或者可能是另一种方法

解决方法

你可以定义另一个函数,让我们将它称为partial,它将一些额外的参数绑定到你的函数
  1. function partial( func : Function,...boundArgs ) : Function {
  2. return function( ...dynamicArgs ) : * {
  3. return func.apply(null,boundArgs.concat(dynamicArgs))
  4. }
  5. }

然后你改变你的功能

  1. private function formatDate( dataField : String,item : Object,column : DataGridColumn ) : String {
  2. var df : DateFormatter = new DateFormatter();
  3.  
  4. df.formatString = "MM/DD/YY";
  5.  
  6. if ( column.dataField == dataField ) {
  7. return df.format(item[dataField]);
  8. }
  9.  
  10. return "ERR";
  11. }

请注意,我在参数列表中首先添加了一个名为dataField的新参数,并将所有对“startDate”的引用替换为该参数.

并像这样使用它:

  1. var startDateLabelFunction : Function = partial(formatDate,"startDate");
  2. var endDateLabelFunction : Function = partial(formatDate,"endDate");

partial函数返回一个新函数,该函数调用原始函数,调用参数将部分与参数连接到新函数…你跟我一起?放置它的另一种方法是它可以返回一个新函数,其中N个参数预先绑定到特定值.

让我们一步一步地完成它:

partial(formatDate,“startDate”)返回一个如下所示的函数

  1. function( ...dynamicArgs ) : * {
  2. return func.apply(null,boundArgs.concat(dynamicArgs));
  3. }

但是func和boundArgs是你作为参数传递给partial的东西,所以你可以说它看起来像这样:

  1. function( ...dynamicArgs ) : * {
  2. return formatDate.apply(null,["startDate"].concat(dynamicArgs));
  3. }

当它被称为时,它或多或少与此相同

  1. function( item : Object,column : DataGridColumn ) : * {
  2. return formatDate("startDate",item,column);
  3. }

田田!

猜你在找的Flex相关文章