set selectedItem w ComboBox Flexa
Kiedy z bazy danych pobieramy hm, dane, a któraś z kolumn przybiera wartości z pewnego niewielkiego zbioru (jak np. dla typu ENUM w MySQL), to w formularzu edycji rekordu chcielibyśmy zwykle użyć komponentu ComboBox do edycji tej kolumny. Problem polega na tym, że ComboBox nie ma prostej metody do ustawiania zadanej wartości. Można owszem ustawić selectedItem, ale tylko przekazując jeden z obiektów z dataProvidera Combo. Nie taki sam obiekt, ale ten sam. Tyle że wygodniej jest przekazać wartość, np. pobraną ze wspomnianej bazy. No i niech etykieta (label) Combo ustawi się sama. Oto rozszerzenie ComboBoksa, które robi co trzeba:
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml">
<!--
komponent SmartComboBox z automatycznym ustawianiem selectedIndex
na podaną wartość
licencja: do swobodnego wykorzystania
-->
<mx:Script>
<![CDATA[
protected var _myDP:Object;
[Bindable]
public function set value(v:*):void
{
var found:Boolean = false;
for(var i:int = 0; (i < dataProvider.length) && !found; i++) {
if(v == _myDP[i].data) {
selectedIndex = i;
found = true;
}
}
if(!found) throw(new Error(”invalid value ” + v + ” for SmartComboBox.”,99));
}
[Bindable]
override public function set dataProvider(v:Object):void
{
_myDP = v;
super.dataProvider = v;
}
]]>
</mx:Script>
</mx:ComboBox>