2010-03-30 8 views
5

Ich habe zwei verwandte Combobox (Kontinente und Länder). Wenn sich die Contino ComboBox ändert, fordere ich eine XML von einer bestimmten URL an. Als ich das XML empfangen ändern i die Datenprovider für die ComboBox Länder, wie folgt aus:Flex 3.5.0; Aktualisieren ComboBox Anzeigeliste auf DataProvider- Änderung

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

ich die ListEvent.CHANGE versenden, weil ich es verwenden, um einen anderen ComboBox zu ändern, bitte ignorieren (und die erste Zeile).

Also, mein Problem ist das: Ich wähle "ASIA" aus den ersten Kontinenten, dann wird die Combobox DATA aktualisiert (das kann ich sehen, weil das erste ITEM ein Item mit dem Label '23 countries 'ist). Ich klicke auf die Combo, dann kann ich die Länder sehen.

NOW, wähle ich „Afrika“, das erste Element angezeigt wird, mit der ComboBox geschlossen wird, dann, wenn ich es klicken, sind die Länder immer noch die, die aus Asien. Wie auch immer, wenn ich einen Artikel in der Liste klicken, dann aktualisiert die Liste richtig, und auch, es hat die richtigen Informationen (wie ich sagte, es andere Combobox betrifft). SO das einzige Problem ist, dass die Anzeigeliste nicht aktualisiert wird.

In dieser Funktion habe ich versucht, diese Ansätze

  • Konvertieren von XMLList zu XMLCollection und sogar Arraycollection

  • this.resellersCountry.invalidateDisplayList Hinzufügen();

  • Auslösende Ereignisse wie DATA_CHANGE und UPDATE_COMPLETE Ich weiß, dass sie nicht viel Sinn machen, aber ich habe ein wenig verzweifelt.

Bitte beachten Sie, dass dies nicht passiert ist, als ich 3.0.0 SDK verwendet habe.

Sorry, wenn ich dumm bin, aber die Flex-Ereignisse bringen mich um.

Antwort

11

Dataprovider der Dropdown ‚comboBox Einstellung scheint dieses Problem zu beheben.

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

Leider aber ich habe bereits die GUI geändert und kann Ihre Lösung nicht überprüfen. Ich werde es versuchen, sobald ich die Chance habe und deine Antwort akzeptiere. Danke noch einmal. –

+0

überprüft. es funktioniert. –

+0

Arbeitete auch für mich. – Konsumierer

1

this.resellersCountry.dropdown.dataProvider = Elemente;

Werke (Flex SDK 3.5)

Hope this bug

1

Neben Christophe's Antwort in 4.0 behoben:

Wenn Sie Daten verwenden in Ihrem ComboBox Bindung benötigen Sie verwenden BindingUtils die dropdown's Dataprovider zu setzen:

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

Dank Christophe in der richtigen Richtung.

0

Ein andere Lösung, in einem Adobe Community forum post umrissen, ist die Neuzuweisung ein anderes ArrayCollection Objekts des ComboBox-, und stattdessen wieder verwendet (und Wieder Bestücken) die ursprüngliche Stelle zu vermeiden:

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