Flex 3.5.0; Обновление списка отображения ComboBox при изменении поставщика данных - PullRequest
5 голосов
/ 30 марта 2010

У меня есть два связанных комбинированных списка (континенты и страны). Когда континенты 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-ю строку).

Итак, моя проблема заключается в следующем: я выбираю «АЗИЯ» на первых континентах, затем обновляется комбинированный список данных. Я нажимаю комбо, затем я вижу страны.

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

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

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

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

  • Запуск событий, таких как DATA_CHANGE и UPDATE_COMPLETE Я знаю, что они не имеют особого смысла, но я немного отчаялся.

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

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

Ответы [ 4 ]

11 голосов
/ 13 апреля 2010

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

this.resellersCountry.dataProvider = items;
this.resellersCountry.dropdown.dataProvider = items;
1 голос
/ 14 апреля 2011

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

Когда вы используете привязку данных в 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;
}

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

1 голос
/ 06 мая 2010

this.resellersCountry.dropdown.dataProvider = items;

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

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

0 голосов
/ 05 сентября 2014

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

items.removeAll();
for each (var item:* in newItems)
{
    items.addItem(item);
}
...