AdvancedDataGridColumn менее продвинут, чем GridColumn?
То, что работает
<s:GridColumn dataField="country.code" headerText="Country Code"/>
То, что не
<mx:AdvancedDataGridColumn dataField="country.code" headerText="Country Code" width="50" />
У нас есть еще много атрибутов grand-child, таких как country.code, и мы должны использовать AdvancedDataGrid. Если заглянуть глубже в набор функций dataField(value:String) обоих GridColumn, только Normal Grid поддерживает точку ".".
Мы не хотим использовать labelFunction, так как у нас более 50 таких столбцов... Есть ли способ расширить столбец Advanced Grid для поддержки точки?
Не могли бы вы предложить решение? Спасибо
2 ответа
AdvancedDataGrid является компонентом mx и, следовательно, он старше, чем Spark DataGrid. Таким образом, Spark DataGrid просто приносит новые функции (по сравнению со старым mx DataGrid).
Если вы хотите эту функцию в ADG, у вас есть два подхода:
- Отправляйтесь в Apache Flex JIRA и зарегистрируйте проблему "улучшения". Может быть, вам повезет, и кто-то поднимет это. Но я бы не стал на это рассчитывать: ADG был отдан на аутсорсинг Adobe (давно) и по сравнению с другими компонентами это дерьмовый кусок кода; Вы не сможете легко найти кого-то, кто желает погрузиться в эту традиционную выгребную яму.
- Возьми дело в свои руки. Клонировать репо Apache Flex; добавить желаемый функционал; отправьте ваш патч сообществу Apache Flex. Если у вас есть готовое решение, они быстро ответят.
Мы фактически добавили эту поддержку в нашу расширенную версию AdvancedDataGrid. Решение на самом деле очень простое, просто расширьте AdvancedDataGridColumn (есть некоторые другие вещи, о которых нужно беспокоиться, такие как сортировка, фильтрация и т. Д., Но идея такая, как ниже:) Мы добавили кучу вещей для поддержки встроенных форматы и тому подобное, поэтому приведенный ниже код является просто псевдо-кодом для этой конкретной проблемы, а не фактическим кодом из нашей кодовой базы.
public class ExtendedAdvancedDataGridColumn{
public var enableNestedPropertySupport:Boolean=true;
public override function itemToLabel(data:Object, withFormatting:Boolean=true):String
{
if(enableNestedPropertySupport){
return UIUtils.resolveExpression(data,dataField);
}
else{
return super.itemToLabel(data, withFormatting);
}
}
}