Flex DatagridColumn LabelFunction Дополнительные параметры - PullRequest
0 голосов
/ 08 марта 2011

У меня есть столбец данных, в котором определена функция 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 ]

2 голосов
/ 08 марта 2011

Вы должны будете расширить класс 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 (также проверит сетку данных владельца для функции label). 'data' в 'itemToLabel' - это ваш объект. Вы можете включить нужное значение точности в объект или жестко закодировать его в расширенный класс (или внедрить, или singleton, класс var, как вам угодно).

На данный момент вы можете пойти дальше и передать его в качестве третьего параметра вашей новой функции labelFunction.

0 голосов
/ 06 января 2013

В функции метки для столбца таблицы данных вы можете получить доступ к назначенному полю данных, используя свойство 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] в методе функции вашего ярлыка

0 голосов
/ 08 марта 2011

Это будет работать:

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