Vinicius,

Há uma outra alternativa para passar informações entre classes, sem
criar dependencia entre seu componente e a Application o que como vc
mesmo sabe não é recomendável).

Como o Mário sugeriu, evento personalizados é ma maneira de passar
informações do componente para o 'caller'.

Agora lembre-se que no Flex, quando vc cria um componente (.mxml
ou .as) vc está na verdade criando uma nova classe. Seu componente que
implementa uma TitleWindow está na verdade extendendo a classe
TitleWindow.
Você pode se aproveitar deste fato e implementar um API para sua
classe (componente). Você pod definir propriedades de entrada/saida da
sua classe e deste modo passar/receber informações entre o 'caller' e
teu componente.
Deixa eu tentar explicar com um exemplo.

Digamos que teu componente seja SelecionaBairro.mxml:

<mx:TitleWindow ...
     <mx:Script>
         //--------------
         // Interface para SelecionaBairro
         //-------------
         //--------------
         // argumentos de entrada
         //-------------
             // se vc tiver algum parâmetro a passar para o componente
vc declara a propriedade aqui:
           public var parametroDeEntrada1:String;
         //--------------
         // argumentos de saida
         //-------------
         public var bairroSelecionado:String;   // este é o argumento
de 'saída' do meu componente
     </mx:Script
      <mx:DataGrid...
</mx:TitleWindow>


Agora, como vc pode usar este API...

Na tua aplicação (ou em algum componente da tua aplicação) vc usa algo
como:

.....
   var pop:SelecionaBairro = new SelecionaBairro();   // aqui vc está
criando uma instância da tua classe
// a variável pop referencia um objeto da classe SelecionaBairro e
através dela vc tem acesso a qualquer propiedade exposta (public) pela
classe
// vc pode por exemplo enviar informações para o objeto...
   pop.parametroDeEntrada1 = 'valor para o paremetro 1';
// depois de posicionar os parametros de entrada vc pode ativar o
TitleWindow
   PopupManager.addPopup(pop,this);  // por exmplo via popup window ou
através de qqr outro mecanismo (addChild, ...)
// agora vc precisa interceptar qdo tua classe completou sua tarefa,
que obviamente tem que ser via eventos in Flex
// isto pode ser através de um evento especial ou no meu exemplo
poderia ser no CLOSE do popup
   pop.addEventListener(CloseEvent.CLOSE,selecionaBairroDone);

Quando SelecionaBairro for fechado selecionaBairroDone será executado,
e para ter acesso aos argumentos de saida da classe o método seria
algo assim:

private function selecionaBairroDone(ev:CloseEvent):void {
   var pop:SelecionaBairro = ev.currentTarget as SelecionaBairro;  //
aqui eu recupero a instância de SelecionaBairro criada anteriormente
   // lembre-se que 'pop' estará apontando para o mesmo objeto criado
anteriormente, com todos as variáveis e propriedades
   // daquele objeto exatamente como estava no momento em que o popup
foi fechado
   // assim através de 'pop' eu posso ter acesso aos argumentos de
saída, como definidos no API de SelecionaBairro
  bairro = pop. bairroSelecionado; // copia o valor do bairro
selecionado, que foi posicionado dentro de SelecionaBairro

}

Este mecanismo evita a necessidade de criar eventos personalizados. A
implementação de SelecionaBairro continua encapsulada e independente
do utilizador
A única coisa que fica 'exposta' é a interface entre SelecionaBairro e
o utilizador através de propriedades publicas.

abraço
julio

ps: tem uma coisa nesta técnica que fica um pouco prejudicada do ponto
de vista de encapsulamento completo dos componentes. No flex, qualquer
componente utilizado por exemplo dentro de SelecionaBairro se torna
público. isto é, o datagrid,e outros componentes em SelecionaBairro, é
apresentado como uma propriedade pública. não há uma maneira simples
de evitar este 'side effect', mas se vc simplesmente ignorar
propriedades que não façam parte do API de SelecionaBairro, não há com
que se preocupar. mas esta  uma discussão para 'puristas' e não afeta
a validade desta técnica.

On Mar 13, 6:08 pm, Mário Júnior <juninho...@gmail.com> wrote:
> Vinicius, vc tem q usar eventos personalizados (custom events) que deverão
> ser disparados (dispatchEvent) no momento que sua janela fechar. Nesses
> eventos vc pode transportar dados da forma que quiser, e é aí que vc irá
> transportar os dados da sua consulta.
>
> Assim, vc torna seu componente (a janela de consulta) bem mais reutilizável
> e totalmente desacoplado do seu application (nada de [Bindable] public var
> na app raiz).
>
> Só não se esqueça de "amarrar" um listener na janela antes de mostra-la na
> tela.
> (janela.addEventListener(SeuEventoProprio.NOME_EVENTO, funcaoExecutar);
>
> Procure no histórico por pelas palavras chaves q deixei entre parenteses, ou
> até mesmo na web, que vc vai achar material para estudo.
>
> Bons estudos.
>
> 2009/3/13 Vinícius Velasco <irc.vinic...@gmail.com>
>
>
>
> > Olá PessoALL,
>
> > Estou com a seguinte duvida:
> > Eu tenho uma tabela de bairros. No cadastro de pessoa eu tenho o campo
> > bairro que eu digito somente o código do bairros e ele me traz o nome, até
> > ai tudo bem. Na minha tela de pessoas eu chamo uam titlewindow que tem uma
> > grid que me mostra todos os bairros e nela tem um textinput pra pesquisar eu
> > seleciono o bairro desejado e ela fecha trazendo para o cadastro de pessoas
> > o nome do bairro, acontece que eu fiz no app um variavel bindable e uso ela
> > pra carregar o meu textinput (o que é errado) outro problema é que eu tenho
> > mais campos assim então tive que fazer para cada consulta uma titlewindow e
> > o pior em uma tela q tem cidade nascimento cidade atual eu preciso fazer uma
> > POG federal usando variaveis na app e flag's. Bom eu consigo criar uma
> > titlewindow extendida e passar os valor que quero como em qual tabela
> > peskisar e etc soh que eu nao consigo retornar o valor selecionado. Alguem
> > teria alguma dica ou material pra fazer isso?
>
> > Desculpem o tamanho do texto
>
> > Desde ja agradeço
>
> > --
> > Bel. Vinícius Velasco
> > Analista de Desenvolvimento - Ábaco
> > MSN: ircvinic...@hotmail.com
> > Skype: ircvinicius
> > Fone: 66 9206 6966
> > Rondonópolis - Mato Grosso - Brasil
> > "Tudo Posso Naquele que me Fortalece" Fil 4:13
>
> --
> Mário Júnior
> Programador Java / Adobe Flexhttp://blog.mariojunior.com
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para 
flexdev-unsubscr...@googlegroups.com
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a