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

Responder a