首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Flex Datagrid创建可重用的labelFunction?

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

Stack Overflow用户
提问于 2008-11-19 03:55:30
回答 3查看 15.5K关注 0票数 8

我有一个标签函数,如下所示:

代码语言:javascript
复制
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‘,那么它就可以正常工作。我想让这个函数泛型,这样我就可以在任何地方使用它。

我该怎么做呢。我想我需要使用某种“反射”--或者完全使用另一种方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-19 08:19:00

您可以定义另一个函数,我们将其命名为partial,它将一些额外的参数绑定到您的函数:

代码语言:javascript
复制
function partial( func : Function, ...boundArgs ) : Function {
  return function( ...dynamicArgs ) : * {
    return func.apply(null, boundArgs.concat(dynamicArgs))
  }
}

然后更改函数,如下所示:

代码语言:javascript
复制
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“的所有引用。

并像这样使用它:

代码语言:javascript
复制
var startDateLabelFunction : Function = partial(formatDate, "startDate");
var endDateLabelFunction   : Function = partial(formatDate, "endDate");

partial函数返回一个新函数,该函数使用对partial的调用中的参数以及新函数的参数来调用原始函数。你在听我说吗?另一种说法是,它可以返回一个新函数,其中N个参数预先绑定到特定值。

让我们一步一步地来看一下:

partial(formatDate, "startDate")返回如下所示的函数:

代码语言:javascript
复制
function( ...dynamicArgs ) : * {
  return func.apply(null, boundArgs.concat(dynamicArgs));
}

但是funcboundArgs是您作为参数传递给partial的,所以您可以说它看起来像这样:

代码语言:javascript
复制
function( ...dynamicArgs ) : * {
  return formatDate.apply(null, ["startDate"].concat(dynamicArgs));
}

当它被调用时,它将与以下内容大致相同

代码语言:javascript
复制
function( item : Object, column : DataGridColumn ) : * {
  return formatDate("startDate", item, column);
}

塔达!

票数 11
EN

Stack Overflow用户

发布于 2009-04-21 17:42:03

可以使用列的dataField属性作为项的键,使该函数成为泛型函数。

代码语言:javascript
复制
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

票数 14
EN

Stack Overflow用户

发布于 2013-01-08 02:29:59

下面是更通用的方法:

代码语言:javascript
复制
public static function getDateLabelFunction(dateFormatString:String=null, mxFunction:Boolean = false) : Function {
        var retf:Function;

        // defaults
        if(dateFormatString == null) dateFormatString = "MM/DD/YY";
        if(mxFunction) {
            retf = function  (item:Object, column:DataGridColumn):String
            {
                var df:DateFormatter = new DateFormatter();
                df.formatString = dateFormatString;

                var value:Object = item[column.dataField];

                return df.format(value);
            }
        }else {
            retf = function  (item:Object, column:GridColumn):String
            {
                var df:DateFormatter = new DateFormatter();
                df.formatString = dateFormatString;

                var value:Object = item[column.dataField];

                return df.format(new Date(value));
            }
        }

        return retf;

    }

使用率(Spark DataGrid)

代码语言:javascript
复制
var labelFunction = getDateLabelFunction();

或用于MX数据网格

代码语言:javascript
复制
var labelFunction = getDateLabelFunction(null,true);

要传递自定义日期格式字符串,请执行以下操作:

代码语言:javascript
复制
var labelFunction = getDateLabelFunction("DD/MM/YYYY",true);

默认为"MM/DD/YYYY";

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/300950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档