Humm, tava fuçando aqui e consegui fazer o que eu queria. Vi que o parentDocument e o parentApplication sao criados na classe UIComponent, estendi ela entao... ficou assim:
1 - Aplicacao (Teste.mxml): <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" xmlns:telas="*"> <mx:Script> <![CDATA[ trace(" ---> aplicacao"); ]]> </mx:Script> <telas:Tela1 /> <mx:Label id="app_txt" /> </mx:Application> 2 - O component (Tela1.mxml): <?xml version="1.0" encoding="utf-8"?> <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:controls="*" creationComplete="tela1_control.init()"> <mx:Script> <![CDATA[ trace(" ---> tela 1"); ]]> </mx:Script> <controls:Tela1Control id="tela1_control"/> <mx:Button id="tela1_btn" label="Botão tela 1"/> <mx:Label id="tela1_txt" /> </mx:VBox> 3 - A classe (Tela1Control.as): package { import mx.core.UIComponent; import flash.events.MouseEvent; [Bindable] public class Tela1Control extends UIComponent { public function Tela1Control() { trace(" ---> Tela1Control - construtor"); } public function init():void { trace(" ---> Tela1Control - metodo init"); parentDocument.tela1_btn.addEventListener(MouseEvent.CLICK, botaoHandler); } private function botaoHandler(event:MouseEvent):void { trace(" ---> Tela1Control - metodo botaoHandler"); parentDocument.tela1_txt.text = "Acessou parentDocument !"; parentApplication.app_txt.text = "Acessou parentApplication !"; } } } Funcionou, mas tive de chamar uma funcao (init) na classe com o creationComplete do component... Achei estranha eu nao poder usar o parentDocument no construtor do classe Tela1Control, pois pela ordem dos traces ele parece ser executado primeiro ;-( Que zica, hehehehe Ricardo On 11 jul, 08:04, Beck Novaes <[EMAIL PROTECTED]> wrote: > No way! > > A não ser que você passe o objeto que instanciou o classe como > parâmetro: > > teste_cl = new TesteControl2(this); > > Agora, isso aqui tá muito estranho: > > public function TesteControl2() > { > trace(parentDocument) > trace(this); > trace(this.parentDocument); > parentDocument.TesteControl2.addEventListener(MouseEvent.CLICK, > botaoHandler); > > } > > Na ultima linha deste construtor, para quê você precisa referenciar o > "parentDocument.TesteControl2" sendo que você está dentro do próprio > "TesteControl2"? Ou seja, você não poderia fazer assim: > > public function TesteControl2() > { > trace(parentDocument) > trace(this); > trace(this.parentDocument); > this.addEventListener(MouseEvent.CLICK, botaoHandler); > > } > > []'s > Beck Novaes > > On 10 jul, 17:26, Ricardo Ramires <[EMAIL PROTECTED]> wrote: > > > Tenho uma aplicacao que estou desenvolvendo e gostaria de deixar nos > > arquivos mxml apenas os components com seus respectivos id's e fazer > > toda a programacao separada em classes mas nao to conseguindo acessar > > o documento superior com o parentDocument > > > A idéia é se eu tiver um component chamado Teste.mxml teria também uma > > classe TesteControl.as com o código que manipula essa tela. > > > Assim funciona mas sobe até a raiz: > > > Teste.mxml > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > layout="vertical" > > creationComplete="init()"> > > > <mx:Script> > > <![CDATA[ > > [Bindable] > > private var teste_cl:TesteControl; > > > private function init():void > > { > > teste_cl = new TesteControl(); > > } > > ]]> > > </mx:Script> > > > <mx:Button id="botao_btn" label="Clique"/> > > <mx:Label id="texto_txt" /> > > > </mx:Application> > > > TesteControl.as > > > package > > { > > import flash.events.EventDispatcher; > > import flash.events.MouseEvent; > > import mx.core.ApplicationGlobals; > > > public class TesteControl extends EventDispatcher > > { > > public var raizDaAplicacao:Object = > > ApplicationGlobals.application; > > > public function TesteControl() > > { > > > > raizDaAplicacao.botao_btn.addEventListener(MouseEvent.CLICK, > > botaoHandler); > > } > > > private function botaoHandler(botaoHandler:MouseEvent):void > > { > > raizDaAplicacao.texto_txt.text = "Clicou !"; > > } > > } > > > } > > > --------------------------------------------------------- > > > Mas se a tela for um component, nao deu certo, tentei assim: > > > 1 - Tenho a aplicacao (Teste2.mxml) > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > layout="vertical" > > initialize="init()" xmlns:local="*"> > > > <local:CompTeste /> > > > </mx:Application> > > > 2 - Que chama o component(CompTeste.mxml): > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" > > creationComplete="init()"> > > > <mx:Script> > > <![CDATA[ > > [Bindable] > > private var teste_cl:TesteControl2; > > > private function init():void > > { > > teste_cl = new TesteControl2(); > > } > > ]]> > > </mx:Script> > > > <mx:Button id="botao_btn" label="Clique 2"/> > > <mx:Label id="texto_txt" /> > > > </mx:VBox> > > > 3 - E tem a classe para controlar ele (TesteControl2.as) > > > package > > { > > import flash.events.MouseEvent; > > import mx.core.UIComponent; > > > public class TesteControl2 extends UIComponent > > { > > public function TesteControl2() > > { > > trace(parentDocument) > > trace(this); > > trace(this.parentDocument); > > > > parentDocument.TesteControl2.addEventListener(MouseEvent.CLICK, > > botaoHandler); > > } > > > private function botaoHandler(botaoHandler:MouseEvent):void > > { > > parentDocument.texto_txt.text = "Clicou !"; > > } > > } > > > } > > > O que eu to querendo é acessar os id's dos components do mxml onde eu > > instanciei a classe... > > > Se alguem puder dar uma luz, agradeço > > > Ricardo --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
