Flex ComboBox, valor predeterminado y proveedores de datos
-
09-06-2019 - |
Pregunta
tengo un flex ComboBox
que se puebla por un dataprovider
todo está bien...
Ahora me gustaría agregar una opción predeterminada "-seleccionar un elemento-" en el índice 0, ¿cómo puedo hacer esto y seguir usando un dataprovider
?No he visto ningún ejemplo de esto, pero no puedo imaginar que esto sea difícil...
Solución
Si no necesita que el elemento predeterminado sea seleccionable, puede utilizar el prompt
propiedad de ComboBox
y establecer el selectedIndex
a 1.Eso mostrará la cadena que configuraste. propmt
como el valor seleccionado hasta que el usuario elija otro.Sin embargo, no aparecerá en la lista de opciones.
Otros consejos
Me encontré con este problema hoy y quería compartir mi solución.
Tengo un ComboBox que tiene un ArrayCollection que contiene objetos como proveedor de datos.Cuando se ejecuta la aplicación, utiliza un RemoteObject para salir y obtener ArrayCollection/Objects.En mi controlador de eventos para esa llamada, simplemente le pido que agregue otro objeto al comienzo de ArrayCollection y lo seleccione:
var defaultOption:Object = {MyLabelField: "Select One"};
myDataProvider.addItemAt(defaultOption, 0);
myComboBox.selectedIndex = 0;
Así es como se ve mi ComboBox como referencia:
<mx:ComboBox id="myComboBox" dataProvider="{myDataProvider}" labelField="MyLabelField" />
La forma en que he lidiado con esto en el pasado es crear una nueva colección para que sirva como proveedor de datos para el cuadro combinado, y luego escucho los cambios en la fuente original (usando un mx.BindingUtils.ChangeWatcher
).Cuando recibo dicha notificación, vuelvo a crear mi proveedor de datos personalizado.
Ojalá supiera una mejor manera de abordar esto;Seguiré esta pregunta por si acaso.
Esto se puede utilizar a continuación del código para el valor predeterminado seleccionado del cuadro combinado.
var index:String = "foo";
for(var objIndex:int = 0; objIndex < comboBox.dataProvider.length; objIndex++) {
if(comboBox.dataProvider[objIndex].label == index)
{
comboBox.selectedIndex = objIndex;
break;
}
}
<mx:ComboBox id="comboBox" dataProvider="{_pageIndexArray}" />