Componentes

2 views
Skip to first unread message

Giancarlo Faccio Hammes

unread,
Feb 1, 2007, 5:13:19 AM2/1/07
to fle...@googlegroups.com
Bom dia Senhores,
estou separando meus pojetos em componentes e adicionando-os ao meu mxml principal através de mxmlns. Porém, o compilador me avisa que não posso definir uma id pra tag root dos meus componentes. Então como posso manipula-los através de scripts sendo que não posso chama-los? Estou fazendo a coisa certa? Existe outra forma de organizar meu mxml em outros arquivos e fazer "includes" no main?
Agradeço a atenção de todos.
 
 
 
--
Giancarlo Faccio Hammes
Analista de T.I
Setor de Tecnologia da Informação
Unimed Extremo Oeste Catarinense
email: gian...@unimedsc.com.br
msn: gian...@hotmail.com
skype: nefariun_ec
(49) 36312204
(49) 88012357 (Celular TI)

Daniel Schmitz

unread,
Feb 1, 2007, 5:29:15 AM2/1/07
to fle...@googlegroups.com
Tente usar ParentApplication

André Gil

unread,
Feb 1, 2007, 6:30:01 AM2/1/07
to fle...@googlegroups.com
Oi Giancarlo,

Se eu entendi bem o seu problema, é no Action Script do componente que você não sabe como chamá-lo?
Se for isso, basta você usar assim:

this.propriedade = valor;

Você não pode definir mesmo uma ID no componente, só na utilização dele. Mas o "this" retorna o componente, não importando qual ID ele tenha.

[]'s
André Gil.

Fabio Goll

unread,
Feb 1, 2007, 6:43:30 AM2/1/07
to flexdev
Giancarlo, defina o ID na hora de instanciar o componente na classe
pai.

Ex.: <meupackage:MeuComponente id="meuComponente" />

Atenciosamente,
Fábio Goll

Giancarlo Faccio Hammes escreveu:

> ------=_NextPart_000_0061_01C745D8.D4F95130
> Content-Type: text/html; charset=iso-8859-1
> Content-Transfer-Encoding: quoted-printable
> X-Google-AttachSize: 1442
>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> <HTML><HEAD>
> <META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
> <META content="MSHTML 6.00.5730.11" name=GENERATOR>
> <STYLE></STYLE>
> </HEAD>
> <BODY bgColor=#ffffff>
> <DIV><FONT face=Arial size=2>Bom dia Senhores,</FONT></DIV>
> <DIV><FONT face=Arial size=2>estou separando meus pojetos em componentes e


> adicionando-os ao meu mxml principal através de mxmlns. Porém, o compilador me
> avisa que não posso definir uma id pra tag root dos meus componentes. Então como
> posso manipula-los através de scripts sendo que não posso chama-los? Estou
> fazendo a coisa certa? Existe outra forma de organizar meu mxml em outros

> arquivos e fazer "includes" no main?</FONT></DIV>
> <DIV><FONT face=Arial size=2>Agradeço a atenção de todos.</FONT></DIV>
> <DIV>&nbsp;</DIV>
> <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
> <DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
> <DIV><FONT face=Arial size=2>--<BR>Giancarlo Faccio Hammes<BR>Analista de
> T.I<BR>Setor de Tecnologia da Informação<BR>Unimed Extremo Oeste
> Catarinense<BR>email: <A
> href="mailto:gian...@unimedsc.com.br">gian...@unimedsc.com.br</A><BR>msn: <A
> href="mailto:gian...@hotmail.com">gian...@hotmail.com</A><BR>skype:
> nefariun_ec<BR>(49) 36312204<BR>(49) 88012357 (Celular
> TI)</FONT></DIV></BODY></HTML>
>
> ------=_NextPart_000_0061_01C745D8.D4F95130--

Giancarlo Faccio Hammes

unread,
Feb 1, 2007, 6:45:45 AM2/1/07
to fle...@googlegroups.com
Desculpe André, mas não entendi direito.
Na verdade o problema ocorre não no Action Script e sim na hora de compilar o projeto do componente. O Flex apresenta uma crítica ao código do componente onde diz que não se pode dar uma id para a tag principal. Por exemplo:
quando crio um componente baseado em Canvas e coloco uma id para essa tag:
<mx:canvas id="canvasteste">
ele me diz que não é possivel definir uma id para a tag root do componente.
então não sei como manipular uma propriedade de canvas através de action script sem poder dar um nome a ele. posso fazer uma gambiarra....
<mx:canvas>
    <mx:canvas id="canvasteste">
    </mx:canvas>
</mx:canvas.
 
mas isso é uma engenbração muito da ordinária...
:-D
--
Giancarlo Faccio Hammes
Analista de T.I
Setor de Tecnologia da Informação
Unimed Extremo Oeste Catarinense
email: gian...@unimedsc.com.br
msn: gian...@hotmail.com
skype: nefariun_ec
(49) 36312204
(49) 88012357 (Celular TI)

Giancarlo Faccio Hammes

unread,
Feb 1, 2007, 6:47:39 AM2/1/07
to fle...@googlegroups.com
Show de Bola Fábio!
Isso eu ainda não tinha pensado! Muito Obrigado!

--
Giancarlo Faccio Hammes
Analista de T.I
Setor de Tecnologia da Informação
Unimed Extremo Oeste Catarinense
email: gian...@unimedsc.com.br
msn: gian...@hotmail.com
skype: nefariun_ec
(49) 36312204
(49) 88012357 (Celular TI)
----- Original Message -----
From: "Fabio Goll" <guri...@gmail.com>
To: "flexdev" <fle...@googlegroups.com>
Sent: Thursday, February 01, 2007 9:43 AM
Subject: [flexdev] Re: Componentes

João Fernandes

unread,
Feb 1, 2007, 6:53:00 AM2/1/07
to fle...@googlegroups.com

Giancarlo,

 

Como já foi explicado, pode usar this para referênciar o componente em questão.

 

Se usar

<mx:Canvas xmlns:mx=”blablablala”   >

 

<mx:Script>

                Function minhafuncao():void{

                               this.width = this.width + 30;

}

</mxScript>

</mx:Canvas>

 

O que vai fazer é quando chamar a função minhafuncao, o seu componente vai aumentar de 30 pixeis em largura. O scope this referece sempre ao componente externo onde se está a executar o código. Não precisa de dar um id ao seu componente, aliás, não consegue mesmo.

 

João Fernandes

<BR<BR

André Gil

unread,
Feb 1, 2007, 7:30:58 AM2/1/07
to fle...@googlegroups.com
Giancarlo,

Então, eu tinha dito que você pode usar o ID na hora de chamar o componente, como o Fábio disse, mas isso só vai ajudar se você tiver um Script na aplicação e quiser manipular o componente. Por exemplo:

<mx:application>
   <mx:script>
      private function teste():void{
        myComponent.width = 100;
      }
   </mx:script>

   <c1:componente id="myComponent" />
</mx:application>

Mas se você precisar criar o <script> dentro do componente, você pode usar assim:

<mx:script>
   private function teste():void{
      this.width = 100;
   }
<mx:script>

Os exemplos devem estar errados, mas foi só pra mostrar a idéia, hehehe.

[]'s
André Gil

Giancarlo Faccio Hammes

unread,
Feb 1, 2007, 8:30:53 AM2/1/07
to fle...@googlegroups.com
Bom, colocar um script dentro do componente era oque eu estava tentando evitar mas como não tem outro jeito.
Deve haver um bom motivo pra não ser permitido dar uma id para a tag principal.
Eu vou testar então mas.. será que se eu der um include no componente de um arquivo de script ele vai entender o this? hehe
agradeço a atenção de todos...
mais uma dúvida solucionada...

André Gil

unread,
Feb 1, 2007, 10:29:52 AM2/1/07
to fle...@googlegroups.com
Depende muito do componente que você estiver fazendo. Se você for manipular ele, faça o script fora mesmo. Mas se você precisar que ele tenha algum método que vai sempre ser chamado de fora, por exemplo, vai precisar criar o script dentro dele como Public. E lá dentro, só o this para acessar as propriedades dele mesmo.

No Flex, tudo são componentes. Não sei se você já segurou o CTRL e clicou em algum componente do Flex no Flex Builder, ele te leva direto para o código do componente. Lá eles nunca usam o ID. O ID você passa quando vai usar o componente, na criação de uma instância dele.

[]'s

Giancarlo Faccio Hammes

unread,
Feb 2, 2007, 5:30:28 AM2/2/07
to fle...@googlegroups.com
Senhores,
fiz os testes e ainda não consegui fazer a coisa funcionar. :-(
Oque acontece é o seguinte, tenho um arquivo que define a minha barra de menu (b_menuprinc.mxml) e outro que é um canvas(b_canvascli.mxml). Oque o sistema deve fazer é, no click na opção do menu, alterar a propriedade visible do canvas. Além desses dois ainda tenho um arquivo principal(main.mxml) onde eu chamo os componentes e um script (b_interface.as) que é o script que fará a alteração da propriedade. Se incluo o o arquivo de script no arquivo b_menuprinc.xml ele diz que não reconhece a function definida no Click do menu. Se eu insiro o script direto no arquivo b_menuprinc.mxml, ele reconheçe a função mas acontece aquele velho problema da ID do canvas (ele não sabe quem é). Alguém pode dar uma mão? É que eu to aprendendo... hehe
Obrigado!

André Gil

unread,
Feb 2, 2007, 6:27:20 AM2/2/07
to fle...@googlegroups.com
Bom, se o seu main.mxml que chama os outros componentes for o application, você pode fazer assim de qualquer lugar:

Application.application.id_do_componente.metodo();

ou

Application.application.id_do_canvas.visible = false;
Application.application.id_do_canvas.includeInLayout = false;

O visible esconde e o includeInLayout faz com que ele não seja desenhado na tela e não ocupe o espaço onde ele está colocado.

[]'s
André Gil.

João Fernandes

unread,
Feb 2, 2007, 6:57:07 AM2/2/07
to fle...@googlegroups.com

O melhor é usar um singleton e fazer um bind da propriadade a uma propriadade desse singleton. Depois basta alterar a propriadade no singleton e o seu canvas altera automaticamente.

 

Exemplo

 

No seu b_menuprinc

 

click=”myModelLocator.getInstance().meuCavasVisivel = myModelLocator.getInstance().meuCavasVisivel == true? false:true”

 

e no seu canvas

<mx:Canvas visible=”{ myModelLocator.getInstance().meuCavasVisivel }” includeInLayout=”{ myModelLocator.getInstance().meuCavasVisivel  }”/>

 

myModelLocator e um AS deste genero

 

package

{

 

               

               

                [Bindable]

                public class GeralModelLocator

                {

                               private static var modelLocator: myModelLocator;

                              

                               public static function getInstance() : myModelLocator

                               {

                                               if ( modelLocator == null )

                                                               modelLocator = new myModelLocator ();

                                                              

                                               return modelLocator;

                   }

                  

                   public function myModelLocator ()

                   {

                               if (myModelLocator.modelLocator != null )

                                                               throw new Error( "Only one myModelLocator instance should be instantiated" );                                         

                   }          

                  

                public var meuCavasVisivel:Boolean=true;


<BR

Reply all
Reply to author
Forward
0 new messages