2010-03-30 8 views
5

Tengo dos ComboBoxes relacionadas (continentes y países). Cuando los continentes ComboBox cambian, solicito un XML de una URL determinada. Cuando recibo que XML cambio el DataProvider para el ComboBox países, como esto:Flex 3.5.0; Actualice la lista de visualización de ComboBox al cambiar el proveedor de datos

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

que despachar la ListEvent.CHANGE porque yo lo uso para cambiar otra ComboBox así que por favor ignorar que (y la primera línea).

Entonces, mi problema es este: selecciono "ASIA" de los primeros continentes, luego se actualiza el cuadro combinado DATA (puedo verlo porque el primer ITEM es un artículo con la etiqueta "23 países"). Hago clic en el combo para ver los países.

AHORA, selecciono "África", se muestra el primer elemento, con el ComboBox cerrado, y cuando hago clic en él, los países siguen siendo los de Asia. De todos modos, si hago clic en un elemento en la lista, la lista se actualiza correctamente y también tiene la información correcta (como ya he dicho, afecta a otros ComboBox). ASÍ, el único problema es que la lista de visualización no se actualiza.

En esta función me trataron estos enfoques

  • Conversión XMLList a XMLCollection e incluso ArrayCollection

  • Adición this.resellersCountry.invalidateDisplayList();

  • Disparando eventos como DATA_CHANGE y UPDATE_COMPLETE Sé que no tienen mucho sentido, pero me puse un poco desesperado.

Tenga en cuenta que cuando usé 3.0.0 SDK esto no sucedió.

Lo siento si soy estúpido, pero los eventos de flex me están matando.

Respuesta

11

Configurar el proveedor de datos del menú desplegable comboBox 'parece solucionar este problema.

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

lo siento, pero ya cambié la GUI y no puedo verificar su solución. Lo intentaré tan pronto como tenga la oportunidad y aceptaré tu respuesta. Gracias de nuevo. –

+0

marcado. esta funcionando. –

+0

Funcionó para mí, también. – Konsumierer

1

this.resellersCountry.dropdown.dataProvider = artículos;

obras (Flex SDK 3.5)

Esperamos que este error corregido en 4,0

1

Además de Christophe's respuesta:

Cuando está utilizando vinculantes en su cuadro combinado de datos que necesitan para utilizar el BindingUtils para ajustar el DataProvider dropdown's:

MXML:

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

de guión:

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

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

Gracias a Christophe para que apunta en la dirección correcta.

0

Otra solución, se reseña en el Adobe Community forum post, es para evitar la re-asignación de un ArrayCollection objeto diferente a la ComboBox, y en lugar de volver a usar (y volver a poblar) la original en su lugar:

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