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