Flex DatagridColumn LabelFunction Дополнительные параметры

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

Решение

Вам нужно будет расширить класс 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.

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

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

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

Другие вопросы по тегам