Я собираюсь сделать предположение, что невозможно изменить вашу структуру данных на этом этапе и перейти оттуда.Помните, что элемент данных, передаваемый itemRenderer, представляет отдельный элемент в вашем dataProvider.В первом случае это будет строка, например:
foo
Во втором случае это будет объект, подобный следующему:
{DESC:"foo", ID:"0"}
Итак, вВ первом случае ваша метка отображается правильно, потому что это строка.Во втором случае Flex запустит метод toString()
для вашего объекта, и он вернет прозвище [Object object]
, которое вы видите.
Чтобы сделать это в одном itemRenderer, вам нужно обновить, как текст установлен на вашем ярлыке.Шаги выглядят следующим образом:
1) Удалите атрибут связанного текста из метки 2) Прослушайте событие dataChange в компоненте ItemRenderer 3) В обработчике события dataChange проверьте, какие типы данных у вас естьи использовать его для условной установки значения текста в метке в зависимости от типа данных.
Это псевдо-код, но это суть
<?xml version="1.0" encoding="utf-8"?>
<fx:Script>
protected function onDataChange(event:Event):void{
if(data is Object){
labelDisplay.text = data.DESC;
} else {
labelDisplay.text = data;
}
}
</fx:Script>
<s:states>
<s:State name="normal"/>
<s:State name="hovered"/>
<s:State name="selected"/>
</s:states>
<s:Label id="labelDisplay" backgroundColor.selected="#1B5790" color.selected="white"
backgroundColor.hovered="#E1DFD2" color.hovered="white" fontWeight.hovered="bold"
width="100%" height="25" paddingLeft="5" paddingTop="5" styleName="myLabelBlack" toolTip="{data}"/>
[Используйте тот же подход, чтобы установить подсказку]
Однако есть много способов сделать это по-другому.Вы можете создать суперкласс с базовыми компонентами и расширить его, переопределив обработчик события onDataChange для соответствующих типов данных.Тогда у вас будет три компонента (суперкомпонент, данные как строковый компонент и данные как компонент объекта), но вы будете повторно использовать большую часть кода.
Если у вас есть явный объекттипы, определенные для вашего второго dataProvider, просто реализуйте пользовательский метод toString (), чтобы вернуть описание и использовать определенный вами itemRenderer.