Flex DatagridColumn LabelFunction Additonal Parameters

时间:2011-03-07 22:07:44

标签: flex datagrid labelfunction

我有一个datagridcolumn,其中定义了labelFunction:

private function myLabelFunction(item:Object, column:DataGridColumn):String 
{
  var returnVal:String;
  var nm:NumericFormatter;
  nm.decimalSeparatorTo = ".";
  nm.precision = additionalParameter;

  returnVal = nmTwoDecimals.format(item[column.dataField]);

  if (returnVal == '0.00') 
  {
    returnVal = '';
  }

  return returnVal;
}

是否可以添加一个额外的参数,以便我可以传递我打算使用的格式化程序的属性值?

例如:

private function myLabelFunction(item:Object, column:DataGridColumn, precisionParam:int):String 
    {
      var returnVal:String;
      var nm:NumericFormatter;
      nm.decimalSeparatorTo = ".";
      nm.precision = precisionParam;

      returnVal = nmTwoDecimals.format(item[column.dataField]);

      if (returnVal == '0.00') 
      {
        returnVal = '';
      }

      return returnVal;
    }

感谢。

3 个答案:

答案 0 :(得分:2)

您必须扩展DataGridColumn类。创建新类后,只需覆盖现有的itemToLabel函数:

public function itemToLabel(data:Object):String
{
        if (!data)
            return " ";

        if (labelFunction != null)
            return labelFunction(data, this);

        if (owner.labelFunction != null)
            return owner.labelFunction(data, this);

        if (typeof(data) == "object" || typeof(data) == "xml")
        {
            try
            {
                if ( !hasComplexFieldName ) 
                data = data[dataField];
                else 
                    data = deriveComplexColumnData( data );
            }
            catch(e:Error)
            {
                data = null;
            }
        }

        if (data is String)
            return String(data);

        try
        {
            return data.toString();
        }
        catch(e:Error)
        {
        }

        return " ";
    }

行'return labelFunction(data,this);'是什么调用labelFunction(也将检查所有者datagrid的labelfunction)。 'itemToLabel'中的'data'是您的对象。您可以在对象中包含所需的精度值,也可以在扩展类中对其进行硬编码(或者注入,或单例,类var,无论您喜欢什么)。

此时,您可以继续将其作为第三个参数传递给新的labelFunction。

答案 1 :(得分:0)

这样可行:

<DataGridColumn labelFunction="{function(item:Object, column:DataGridColumn):String { return anotherLabelFunction(item,column,2) }}" />

// Elsewhere ... 
function anotherLabelFunction(item:Object,column:DataGridColumn,precision:int):String
{
    // Do your business
}

答案 2 :(得分:0)

在datagrid列的label函数中,可以使用dataField属性访问指定的数据字段,请参阅以下语法:

“假设您的标签功能称为formatNumbers_LabelFunction”

private function formatNumbers_LabelFunction(item:Object, column:DataGridColumn):String{

    //Write any code logic you want to apply on your data field ;)
    //In this example, I'm using a number formatter to edit numbers

    return myCustomNumberFormatter.format(item[column.dataField]);
}

这样,您可以使用通用标签功能来处理显示数据的某些统一操作

除此之外,您还可以通过调用其名称来访问数据提供程序中的任何数据字段:

item.YourFieldName

其中item是标签函数方法

中第一个[类型为Object]的参数