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