Flex 3.5.0; Обновление списка отображения ComboBox при изменении поставщика данных

У меня есть два связанных ComboBox (континенты и страны). Когда континенты ComboBox меняются, я запрашиваю XML с определенного URL. Когда я получаю этот XML, я меняю DataProvider для стран ComboBox, например так:

public function displayCountryArray( items:XMLList ):void
        {
            this.resellersCountryLoader.alpha = 0;
            this.resellersCountry.dataProvider = items;
            this.resellersCountry.dispatchEvent( new ListEvent( ListEvent.CHANGE ) );
        }

Я отправляю ListEvent.CHANGE, потому что я использую его для изменения другого ComboBox, поэтому, пожалуйста, игнорируйте это (и 1-ю строку).

Итак, моя проблема заключается в следующем: я выбираю "АЗИЯ" на первых континентах, затем обновляется комбинированный список данных (я вижу это, потому что первый ПУНКТ - это элемент с меткой "23 страны"). Я нажимаю комбо, затем я вижу страны.

СЕЙЧАС я выбираю "Африка", отображается первый элемент с закрываемым ComboBox, затем, когда я щелкаю по нему, все еще остаются страны из Азии. В любом случае, если я щелкну элемент в списке, то список обновится правильно, а также у него будет правильная информация (как я уже говорил, это влияет на другие поля со списком). Так что единственная проблема в том, что список отображения не обновляется.

В этой функции я попробовал эти подходы

  • Преобразование XMLList в XMLCollection и даже ArrayCollection

  • Добавление this.resellersCountry.invalidateDisplayList();

  • Инициирующие события, такие как DATA_CHANGE и UPDATE_COMPLETE. Я знаю, что они не имеют особого смысла, но я немного отчаялся.

Обратите внимание, что когда я использовал 3.0.0 SDK, этого не произошло.

Извините, если я глуп, но гибкие события убивают меня.

4 ответа

Решение

Установка поставщика данных в раскрывающемся списке comboBox, кажется, решает эту проблему.

this.resellersCountry.dataProvider = items;
this.resellersCountry.dropdown.dataProvider = items;

this.resellersCountry.dropdown.dataProvider = items;

работает (Flex SDK 3.5)

Надеюсь, что эта ошибка исправлена ​​в 4.0

В дополнение к ответу Кристофа:

Когда вы используете привязку данных в вашем ComboBox, вам нужно использовать BindingUtils, чтобы установить выпадающий поставщик данных:

MXML:

<mx:ComboBox id="cb_fontFamily"
        width="100%"
        dataProvider="{ model.fontFamilies }" />

Автор сценария:

private function init():void
{
    BindingUtils.bindSetter(updateFontFamilies, model, "fontFamilies");
}

private function updateFontFamilies(fontFamilies:ArrayCollection):void
{
    if (cb_fontFamily != null) cb_fontFamily.dropdown.dataProvider = fontFamilies;
}

Спасибо Кристофу за указание в правильном направлении.

Другой обходной путь, описанный в сообщении на форуме сообщества Adobe, состоит в том, чтобы избежать переназначения другого ArrayCollection возьмите объект ComboBox и вместо этого повторно используйте (и заново заполняете) исходный:

items.removeAll();
for each (var item:* in newItems)
{
    items.addItem(item);
}
Другие вопросы по тегам