2010-03-30 19 views
5

Mam dwa powiązane elementy ComboBox (kontynenty i kraje). Kiedy kontynenty zmieniają się w ComboBox, żądam XML z określonego adresu URL. Kiedy otrzymam że XML i zmienić DataProvider dla ComboBox krajach, podobnie jak to:Flex 3.5.0; Aktualizacja listy wyświetlania ComboBox po zmianie dostawcy danych

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

I wysyłają ListEvent.CHANGE bo używam go zmienić kolejny ComboBox więc proszę ignorować faktu, że (i 1 linia).

Mój problem polega na tym, że wybieram "ASIA" z pierwszych kontynentów, a następnie aktualizuję dane combobox DATA (widzę to, ponieważ pierwszy element ITEM to element z etykietą "23 kraje"). Klikam na combo, a następnie widzę kraje.

TERAZ, wybieram "Afryka", pierwszy element jest wyświetlany, z zamknięciem ComboBox, a po kliknięciu, kraje wciąż są tymi z Azji. W każdym razie, jeśli kliknę element na liście, lista zostanie zaktualizowana poprawnie, a także, że ma prawidłowe informacje (jak powiedziałem, wpływa na inne elementy ComboBox). Jedynym problemem jest to, że lista wyświetlania nie jest aktualizowana.

W tej funkcji Próbowałem te podejścia

  • Konwersja XMLList do XMLCollection a nawet ArrayCollection

  • Dodawanie this.resellersCountry.invalidateDisplayList();

  • Zdarzenia wyzwalające, takie jak DATA_CHANGE i UPDATE_COMPLETE Wiem, że nie mają większego sensu, ale trochę się zdesperowałem.

Należy pamiętać, że gdy użyłem SDK 3.0.0, tak się nie stało.

Przepraszam, jeśli jestem głupi, ale wydarzenia flex zabijają mnie.

Odpowiedz

11

Ustawienie dataprovider na liście rozwijanej comboBox wydaje się naprawić ten problem.

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

przykro ale już zmieniłem GUI i nie mogę sprawdzić twojego rozwiązania. Spróbuję, jak tylko dostanę szansę i przyjmuję twoją odpowiedź. Dzięki jeszcze raz. –

+0

zaznaczona. to działa. –

+0

Pracowałem też dla mnie. – Konsumierer

1

this.resellersCountry.dropdown.dataProvider = items;

prace (Flex SDK 3.5)

nadzieję, że ten bug ustalone w 4,0

1

Oprócz Christophe's odpowiedź:

Kiedy używasz wiążące w ComboBox dane potrzebne do korzystania z BindingUtils ustawić dropdown's DataProvider:

MXML:

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

Script:

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

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

Dzięki Christophe dla wskazując we właściwym kierunku.

0

Innym obejścia przedstawiono w Adobe Community forum post, jest uniknięcie ponownego przypisania innej ArrayCollection obiektu do ComboBox i zamiast ponownie stosując (i ponowne wypełnianie) oryginalny, zamiast:

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