Adobe Flex Combobox DataProvider - PullRequest
       21

Adobe Flex Combobox DataProvider

4 голосов
/ 09 июня 2010

У меня есть проект, скомпилированный с помощью Flex 3.2 SDK.

Один из моих компонентов - это поле со списком, которое связано со свойством (называемым продуктами) в модели Cairngorm. Если я вставлю новое значение в model.products, то в выпадающем списке сразу же появится новое значение. Работает отлично.

Затем я перешел на 3.5 SDK, и выполнение идентичной операции вызывает проблему. Несмотря на то, что модель была обновлена ​​(я убедился, что это определенно так), комбинированный список не отображает новое значение правильно - похоже, он знает, что есть новый элемент, потому что в комбо есть новая строка, но новый ряд пуст и недоступен для выбора. Существующие элементы в комбо доступны и доступны для выбора (как и должно быть). Если я заново инициализирую форму (то есть закрою и снова открою окно TitleWindow, в котором находится комбо), тогда все правильные значения (включая новое) отобразятся в комбо.

Я несколько раз переключался между 3,2 и 3,5, чтобы убедиться, что это действительно основная причина.

Любая идея о том, как обойти это, будет принята с благодарностью.

Ответы [ 2 ]

6 голосов
/ 09 июня 2010

Вы меняете dataProvider или заменяете его?

Я заметил, что в версии Flex 4 AutoCompleteComboBox Flextras компонент ComboBox dataProvider иногда не синхронизируется с выпадающим dataProvider.Я полагал, что это была моя вина из-за изменений, которые я сделал, чтобы добавить автозаполнение в ComboBox.

Вполне возможно, что это изменение было добавлено в Flex 3.5;и я просто не заметил этого до моих приключений Flex 4.

Во-первых, я бы попытался сделать ComboBox недействительным при изменении dataProvider.Вы можете сделать это, прослушивая событие collectionChange коллекции.В обработчике событий просто выполните:

myCombo.invalidateProperties()
myCombo.invalidateDisplayList()

Если вы перечитываете dataPRovider, то вы можете попытаться переопределить метод set dataProvider и добавить строку, подобную этой:

this.dropdown.dataProvider = value;

Это странная проблема.Я полагаю, что во Flex 3 / 3.2 каждый раз при изменении dataPRovider выпадающий список закрывался [уничтожался] и создавался заново.Похоже, они перестали это делать в какой-то момент;что вызывает эту аномалию.

5 голосов
/ 09 июня 2010
//this will replace the list base on an update
private var newDropDown:ListBase;

//This addresses a bug in flex 3.5 SDK 
//where the list base does reflect changes to the data provider
//forums.adobe.com/thread/597632  
//bugs.adobe.com/jira/browse/SDK-25705 
//bugs.adobe.com/jira/browse/SDK-25567
override public function set dataProvider(value:Object):void
{
    super.dataProvider = value;
    newDropDown = dropdown;

    if(newDropDown)
    {
        validateSize(true);
        newDropDown.dataProvider = super.dataProvider;
    }
}
...