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 -~----------~----~----~----~------~----~------~--~---
