2010-03-30 10 views
5

Sono presenti due ComboBox (continenti e paesi) correlati. Quando cambia il ComboBox dei continenti, richiedo un XML da un determinato URL. Quando ricevo che XML cambio il DataProvider per il paesi ComboBox, in questo modo:Flex 3.5.0; Aggiorna elenco di visualizzazione ComboBox in caso di modifica del dataprovider

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

io invio il ListEvent.CHANGE perché io lo uso per cambiare un'altra casella combinata in modo prega di ignorare che (e il 1 ° linea).

Quindi, il mio problema è questo: seleziono "ASIA" dai primi continenti, quindi la combobox DATA get viene aggiornata (posso vedere perché il primo ITEM è un elemento con l'etichetta "23 paesi"). Faccio clic sulla combo, quindi posso vedere i paesi.

ORA, seleziono "Africa", viene visualizzato il primo elemento, con il ComboBox chiuso, quindi quando clicco, i paesi sono ancora quelli dell'Asia. Ad ogni modo, se faccio clic su un elemento nell'elenco, l'elenco si aggiorna correttamente e inoltre ha le informazioni corrette (come ho detto influisce su altri ComboBox). Quindi l'unico problema è che l'elenco di visualizzazione non viene aggiornato.

In questa funzione ho provato questi approcci

  • Conversione XMLList a XMLCollection e anche ArrayCollection

  • calcolata this.resellersCountry.invalidateDisplayList();

  • Attivare eventi come DATA_CHANGE e UPDATE_COMPLETE So che non hanno molto senso, ma mi sono un po 'disperata.

Si prega di notare che quando ho usato 3.0.0 SDK questo non è accaduto.

Scusate se sono stupido, ma gli eventi flessibili mi stanno uccidendo.

risposta

11

L'impostazione del dataprovider del menu a discesa della casella combinata sembra risolvere questo problema.

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

spiacenti, ma ho già cambiato la GUI e non posso controllare la tua soluzione. Lo proverò non appena ne avrò la possibilità e accetterò la tua risposta. Grazie ancora. –

+0

controllato. sta funzionando. –

+0

Ha funzionato anche per me. – Konsumierer

1

this.resellersCountry.dropdown.dataProvider = articoli;

opere (Flex SDK 3.5)

Spero che questo bug risolto in 4,0

1

Oltre a Christophe's risposta:

Quando si utilizza l'associazione dati nella tua casella combinata è necessario utilizzare il BindingUtils per impostare la dataprovider dropdown's:

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; 
} 

Grazie a Christophe per punta nella direzione giusta.

0

Un'altra soluzione, descritta in un Adobe Community forum post, è evitare riassegnazione un diverso ArrayCollection oggetto ComboBox, e invece riutilizzo (e ri-popolamento) quella originale invece:

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