Ter referências diretas para os containers pai nunca é uma boa idéia.
Talvez neste caso nem seja um problema muito grande a princípio. De
qualquer forma, você conseguiria uma solucão mais limpa usando o
Bubles.

O seu teste mxml continua como antes:
<?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.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"/>

        <view:comp id="meuComp"/>

</mx:Application>

Mas o comp.mxml e o ItemSelectedEvent.as sofreram algumas
modificações.

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.events.ItemClickEvent;
                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
                {
                        var newEvent:ItemSelectedEvent = new
ItemSelectedEvent(ItemSelectedEvent.ITEM_SELECTED);
                        newEvent.bubbles = true;
                        dispatchEvent(newEvent);
                }
        ]]>
        </mx:Script>

        <mx:DataGrid dataProvider="{items}" change="onChange()"/>

</mx:Panel>


ItemSelectedEvent:
package
{
import flash.events.Event;

public class ItemSelectedEvent extends Event
{
        public static const ITEM_SELECTED:String = "ItemSelected";

        public function ItemSelectedEvent(type:String, bubbles:Boolean=false,
cancelable:Boolean=false)
        {
                super(type, bubbles, cancelable);
        }

}

}

[]'s
Beck Novaes

On Jul 3, 4:42 pm, Hamad Amaral <[EMAIL PROTECTED]> wrote:
> Beck,
>
> Desculpe voltar ao assunto, mas e no caso de um container filho
> disparando evento no container pai? A solução abaixo também é boa o 
> suficiente?
>
> Obrigado.
>
> teste.mxml:
>
> <?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.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"/>
>
>         <view:comp id="meuComp"/>
>
> </mx:Application>
>
> 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.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
>                         {
>                                 parent.dispatchEvent(new ItemSelectedEvent());
>                         }
>                 ]]>
>         </mx:Script>
>
>         <mx:DataGrid dataProvider="{items}" change="onChange()"/>
>
> </mx:Panel>
>
> ItemSelectedEvent:
> package
> {
>         import flash.events.Event;
>
>         public class ItemSelectedEvent extends Event
>         {
>                 public static const ITEM_SELECTED:String = "ItemSelected";
>
>                 public function ItemSelectedEvent()
>                 {
>                         super(ItemSelectedEvent.ITEM_SELECTED);
>                 }
>
>         }
>
> }
>
> BN> Bem, olhando para este exemplo simplificado a sua solução parece boa o
> BN> suficiente. Uma outra abordagem, tomando como premissa a maneira como
> BN> o problema foi colocado, ou seja, "Executar uma ação num componente
> BN> toda vez que o item selecionado no Grid mudar", poderia ser armazenar
> BN> uma referência para o Grid no seu componente. Mas como o que você quer
> BN> basicamente é tratar o evento "change", você pode tornar isto um pouco
> BN> mais genérico para aceitar um Grid, um List, um Horizontal List, etc.
>
> BN> <?xml version="1.0" encoding="utf-8"?>
> BN> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> BN> layout="vertical"
> BN>         xmlns:view="*" initialize="onInitialize()">
>
> BN>         <mx:Script>
> BN>                 <![CDATA[
> BN>                         import mx.collections.ArrayCollection;
>
> BN>                         [Bindable]
> BN>                         private var items:ArrayCollection = new
> BN> ArrayCollection();
>
> BN>                         private function onInitialize():void
> BN>                         {
> BN>                                 var o1:Object = new Object();
> BN>                                 o1.nome = "Obina";
> BN>                                 items.addItem(o1);
>
> BN>                                 var o2:Object = new Object();
> BN>                                 o2.nome = "Zico";
> BN>                                 items.addItem(o2);
> BN>                         }
>
> BN>                 ]]>
> BN>         </mx:Script>
>
> BN>         <mx:DataGrid id="myGrid" dataProvider="{items}"/>
>
> BN>         <view:comp id="meuComp" listControl="{myGrid}"/>
>
> BN> </mx:Application>
>
> BN> Comopente comp.mxml:
>
> BN> <?xml version="1.0" encoding="utf-8"?>
> BN> <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml";>
>
> BN>       <mx:Script>
> BN>         <![CDATA[
> BN>                 import mx.events.ListEvent;
> BN>                 import mx.controls.listClasses.ListBase;
>
> BN>                 private var _listControl:ListBase;
>
> BN>                 [Bindable]
>
> BN>                 public function set listControl(value:ListBase):void
> BN>                 {
> BN>                         _listControl = value;
> BN>                         _listControl.addEventListene(ListEvent.CHANGE, 
> listChangeHandler);
> BN>                 }
>
> BN>                 public function get listControl():ListBase
> BN>                 {
> BN>                         return _listControl;
> BN>                 }
>
> BN>                 private function listChangeHandler(event:ListEvent):void
> BN>                 {
> BN>                         // do something
> BN>                 }
>
> BN>         ]]>
> BN> </mx:Script>
>
> BN> <mx:Label id="nome" text="nome"/>
>
> BN> </mx:Panel>
>
> BN> Não sei se é a melhor solução pois isto depende dos seus requisitos.
> BN> Mas é uma maneira diferente de fazer a mesma coisa.
>
> BN> []'s
> BN> Beck Novaes
>
> BN> 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