Sem usar parentDocument, Application.application ou precisar estender: ARQUIVO TesteClass.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" xmlns:ns1="*"> <mx:Script> <![CDATA[ public var $view:TesteClassView; public function init():void{ $view = new TesteClassView(this); } ]]> </mx:Script> <mx:Button x="56" y="123" label="Button" id="bt"/> <ns1:telaLogin x="160" y="170"> </ns1:telaLogin> </mx:Application> CLASSE QUE REPRESENTA/CONTROLA O ARQUIVO TesteClass.mxml: package { public class TesteClassView { public var app:TesteClass; function TesteClassView(app:TesteClass){ app = app; app.bt.label = "Clica Aqui pô!"; } } } TAMBÉM FUNCIONA PARA COMPONENTES. COMPONENTE telaLogin.mxml: <?xml version="1.0" encoding="utf-8"?> <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300" creationComplete="init()"> <mx:Script> <![CDATA[ public var $telaLoginView:TelaLoginView; public function init():void{ $telaLoginView = new TelaLoginView(this); }; ]]> </mx:Script> </mx:Panel> CLASSE QUE REPRESENTA/CONTROLA O ARQUIVO telaLogin.mxml: package{ public class TelaLoginView { function TelaLoginView(tela:telaLogin){ tela = tela; tela.title = "Tela Login"; trace(tela.x); } } } ISTO FUNCIONA POIS OS ARQUIVOS .MXML SÃO CLASSES. On 11 jul, 18:57, Ricardo Ramires <[EMAIL PROTECTED]> wrote: > 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 -~----------~----~----~----~------~----~------~--~---
