Estou tentando criar um um componente Dropdownlist que funcione two-way databind, fiz o componente, mas esta instavel tem hora q ele funciona e tem hora q não abaixo segue a ideia de uso e o componente.
Class User_DTO:
var id:int;
var nome:String;
var status:int;
// ex: minha array ficaria
private var status:ArrayCollection = new ArrayCollection([{id:"1", descricao: "aberto"}, {id: "2", descricao: "fechado"}]);
<components:SDropDownList x=width="260" id="dd_status"
dataProvider="{status}"
keyField="id"
selectedValue="@{user.status}"
labelField="descricao"/>
O componente…
package components
{
import flash.events.Event;
import mx.collections.IList;
import mx.utils.ObjectUtil;
import spark.components.DropDownList;
public class SDropDownList extends DropDownList
{
public function SDropDownList()
{
super();
}
//Campo que será utilizado na pesquisa dentro do this.dataProvider
private var _keyField:String;
[Bindable]
public function get keyField():String
{
return _keyField;
}
public function set keyField(value:String):void
{
_keyField = value;
}
//Campo usado para realizar o bind com o DTO.
private var _selectedValue:*;
[Bindable]
// [Bindable("atualiza")]
public function get selectedValue():*
{
return _selectedValue;
}
public function set selectedValue(value:*):void
{
_selectedValue = getValues(value);
}
private function getValues(value:*):*
{
if (value == null)
{
selectedIndex = -1;
return;
}
for each (var obj:Object in dataProvider)
{
if (ObjectUtil.compare(obj[keyField], value) == 0)
{
//selectedItem = obj;
selectedIndex = dataProvider.getItemIndex(obj);
return obj[keyField];
}
}
}
override public function set dataProvider(value:IList):void
{
super.dataProvider = value;
if (selectedValue != null)
selectedValue = getValues(selectedItem[keyField]);
}
}
}