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]
www.hamad.com.br/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