0

我有一个定义了 labelFunction 的 datagridcolumn:

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;
    }

谢谢。

4

3 回答 3

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 (还将检查所有者数据网格的标签函数)。'itemToLabel' 中的 'data' 是你的对象。您可以在对象中包含所需的精度值,也可以在扩展类中对其进行硬编码(或注入或单例类 var,无论您喜欢什么)。

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

于 2011-03-08T00:53:47.313 回答
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
}
于 2011-03-08T00:59:22.447 回答
0

在 datagrid 列的标签函数中,您可以使用 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 是标签函数方法中的第一个参数 [对象类型]

于 2013-01-06T07:58:47.090 回答