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.

Estou enviando para lista pq nao consegui achar nada na net... esta 
dificil.. rsrsrsrsrs

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

-- 
-- 
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
--- 
Você está recebendo esta mensagem porque se inscreveu no grupo "flexdev" dos 
Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um 
e-mail para flexdev+unsubscr...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.


Responder a