当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何为FlexDatagrid创建可重用的labelFunction?》经验,为你挑选了2个好方法。

我有一个标签功能,如:

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',这可以正常工作.我想让这个函数通用,所以我可以在任何地方使用它.

我怎样才能做到这一点.我想我需要使用某种"反思" - 或者完全是另一种方法?



1> 小智..:

您可以使用列的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



2> Theo..:

你可以定义另一个函数,让我们调用它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));
}

funcboundArgs你有什么作为参数进行传递partial,所以你可以说,它看起来像这样:

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

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

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

田田!

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有