2010-08-11 4 views
0

У меня есть две проблемы с моим ComboBox.Flex - ComboBox labelFunction Not Refreshing с обновлением ArrayCollection

Моя первая проблема заключается в том, что когда мой ArrayCollection имеет только один элемент, по какой-то причине я не могу выбрать этот первый элемент. Функция изменения, установленная на mxml, никогда не вызывается, когда я пытаюсь выбрать этот элемент. Если я задаю приглашение, он будет работать. Я знаю, что элемент еще не выбран, потому что при отладке выбранный элемент показывает значение null. Я не хочу использовать подсказку. Я хочу, чтобы первый элемент в ArrayCollection был выбран автоматически. Поэтому, если есть только один элемент, я хочу, чтобы выбранный элемент был таким. FYI. Я использую функцию labelFunction для форматирования данных в Array Collection. Любая идея, почему я не могу выбрать первый элемент или установить первый элемент в ArrayCollection как выбранный элемент?

Моя большая проблема заключается в том, что когда моя коллекция массивов обновляется, моя функция метки не должна обновляться, потому что когда я открываю раскрывающийся список, он имеет определенные данные. Когда коллекция массивов будет обновлена, и я снова открою раскрывающееся меню, я вижу старые данные в раскрывающемся списке, но он больше не существует.

Итак, у меня есть ComboBox, у которого есть источник данных массива из одного кода состояния и его состояния. Это функция labelFunction, которая устанавливает тире между кодом состояния и именем состояния. Их нет подсказки, поэтому ComboBox будет выглядеть как GA - Georgia, и когда вы откроете раскрывающийся список, это будет все, что есть. Я хочу, чтобы этот элемент выбирался автоматически. Любая идея, почему старые данные появляются при открытии раскрывающегося списка после того, как коллекция массивов была обновлена ​​новыми данными?

<mx:ComboBox labelFunction="getFormattedNpaNxxCollectionList()" 
    dataProvider="arrayColl" change="doSomething()"/> 

public function getFormattedNpaNxxCollectionList(item:Object):String 
{ 
    return StringUtil.substitute("{0} - {1}", item.stateCode, item.stateName); 
} 

ответ

1

ли arrayColl объявлен [Bindable] - обновления не будут отражаться автоматически, если его не Привязываемое. Отправьте код, в котором вы обновляете коллекцию.

Чтобы выбрать первый пункт, если есть только один пункт после обновления коллекции массива, вы можете вызвать

if(arrayColl.length == 1) 
    cb.selectedIndex = 0; 

после обновления.

Если вы только обновляете значения в коллекции (а не переназначаете весь новый объект коллекции массива на arrayColl), вы можете сделать это из обработчика событий collectionChange коллекции массива. В противном случае вы должны сделать это после назначения нового объекта коллекции переменной arrayColl.

+0

Извините за поздний ответ, но я хотел, чтобы его опубликовали. Я узнал, что это Flex Flex в 3.5: http://forums.adobe.com/message/2952677 – Dana