Grande Hamad,

Bem, olhando para este exemplo simplificado a sua solução parece boa o
suficiente. Uma outra abordagem, tomando como premissa a maneira como
o problema foi colocado, ou seja, "Executar uma ação num componente
toda vez que o item selecionado no Grid mudar", poderia ser armazenar
uma referência para o Grid no seu componente. Mas como o que você quer
basicamente é tratar o evento "change", você pode tornar isto um pouco
mais genérico para aceitar um Grid, um List, um Horizontal List, etc.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
layout="vertical"
        xmlns:view="*" initialize="onInitialize()">

        <mx:Script>
                <![CDATA[
                        import mx.collections.ArrayCollection;

                        [Bindable]
                        private var items:ArrayCollection = new
ArrayCollection();

                        private function onInitialize():void
                        {
                                var o1:Object = new Object();
                                o1.nome = "Obina";
                                items.addItem(o1);

                                var o2:Object = new Object();
                                o2.nome = "Zico";
                                items.addItem(o2);
                        }

                ]]>
        </mx:Script>

        <mx:DataGrid id="myGrid" dataProvider="{items}"/>

        <view:comp id="meuComp" listControl="{myGrid}"/>

</mx:Application>



Comopente comp.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml";>

      <mx:Script>
        <![CDATA[
                import mx.events.ListEvent;
                import mx.controls.listClasses.ListBase;

                private var _listControl:ListBase;

                [Bindable]

                public function set listControl(value:ListBase):void
                {
                        _listControl = value;
                        _listControl.addEventListene(ListEvent.CHANGE, 
listChangeHandler);
                }

                public function get listControl():ListBase
                {
                        return _listControl;
                }

                private function listChangeHandler(event:ListEvent):void
                {
                        // do something
                }

        ]]>
</mx:Script>

<mx:Label id="nome" text="nome"/>

</mx:Panel>


Não sei se é a melhor solução pois isto depende dos seus requisitos.
Mas é uma maneira diferente de fazer a mesma coisa.


[]'s
Beck Novaes

On Jul 1, 11:53 am, Hamad Amaral <[EMAIL PROTECTED]> wrote:
> Flexers,
>
> Tenho uma tela com um grid e um componente panel (na verdade a
> aplicação é maior, mas simplifiquei para poder postar o código).
>
> Gostaria de ao selecionar um item no grid um evento seja disparado
> para que uma ação no componente seja executada.
>
> Da maneira que o código está escrito funciona sem problemas mas gostaria
> de saber se temos alguma solução melhor.
>
> Segue meu código:
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"; layout="vertical"
>         xmlns:view="*" initialize="onInitialize()">
>
>         <mx:Script>
>                 <![CDATA[
>                         import mx.collections.ArrayCollection;
>
>                         [Bindable]
>                         private var items:ArrayCollection = new 
> ArrayCollection();
>
>                         private function onInitialize():void
>                         {
>                                 var o1:Object = new Object();
>                                 o1.nome = "Obina";
>                                 items.addItem(o1);
>
>                                 var o2:Object = new Object();
>                                 o2.nome = "Zico";
>                                 items.addItem(o2);
>                         }
>
>                         private function onChange():void
>                         {
>                                 meuComp.dispatchEvent(new 
> ItemSelectedEvent());
>                         }
>
>                 ]]>
>         </mx:Script>
>
>         <mx:DataGrid dataProvider="{items}" change="onChange()"/>
>
>         <view:comp id="meuComp"/>
>
> </mx:Application>
>
> Comopente comp.mxml:
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml"; layout="vertical"
>         initialize="onInitialize()">
>
>         <mx:Script>
>                 <![CDATA[
>                         import mx.controls.Alert;
>
>                         private function onInitialize():void
>                         {
>                                 
> addEventListener(ItemSelectedEvent.ITEM_SELECTED, popula);
>                         }
>
>                         private function popula(event:ItemSelectedEvent):void
>                         {
>                                 Alert.show("foi");
>                         }
>                 ]]>
>         </mx:Script>
>
>         <mx:Label id="nome" text="nome"/>
> </mx:Panel>
>
> Evento ItemSelectedEvent.as:
>
> package
> {
>         import flash.events.Event;
>
>         public class ItemSelectedEvent extends Event
>         {
>                 public static const ITEM_SELECTED:String = "ItemSelected";
>
>                 public function ItemSelectedEvent()
>                 {
>                         super(ItemSelectedEvent.ITEM_SELECTED);
>                 }
>
>         }
>
> }
>
> --
> Hamad Amaral
> [EMAIL PROTECTED]/blog
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a