Fiote


Eventos personalizados interagindo entre telas
20 20UTC Março 20UTC 2008, 09:41
Arquivado em: Componentes Flex, flex

Cheguei no flex trabalhando de forma errada, totalmente procedural que erdei do velho e bom VB. Minha necessidade era dentro de uma janela MDI chama a função que tava dentro do Menubar para abrir uma janela referente a solicitação. Mas pensando em manutenção e reutilização do código precisei reaproveitar uma rotina. Com isso não queria chapar Application.application no projeto.
Qual foi a solução
1º – Criar um evento personalizado
2º – Disparar o evento no systemManager
3º – Escutar o evento no MenuBar, tambem pelo systemManager

Criando o evento

package br.com.webinovacoes.eventos
{
import flash.events.Event;
import mx.managers.SystemManager;

public class EventMenuJanela extends Event
{
private var _janela:String;

public function get janela():String{
return this._janela;
}

public function set janela ( v:String):void {
this._janela = v;
/**
// Instancia, configura e dispara o ChangeEvent

var evt:EventMenuJanela = new EventMenuJanela(”janela”);
evt.janela= v;
dispatchEvent( evt );
*/
}

/** Construtor */
public function EventMenuJanela(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}

override public function clone():Event {
return new EventMenuJanela ( type );
}
}
}

Disparando o evento

frm.addEventListener(MouseEvent.CLICK,function(event:MouseEvent):void{
// Instancia, configura e dispara o EventMenuJanela
evtMenuJanela = new EventMenuJanela("janela");
evtMenuJanela.janela = _service;
systemManager.dispatchEvent( evtMenuJanela );
});

Escutando o evento dentro do menubar


...
import br.com.webinovacoes.eventos.EventMenuJanela;
...
/**
* Inicia o Form
*/
private function inicia():void{
// Escuta o evento e redireciona para rotina interna do Menu
systemManager.addEventListener("janela",abreJanela);
}


7 Comentários até o momento
Deixe um comentário

Blz hein!! Descobriu e passou pra gente o conhecimento, parabéns e valeu´s!

Comentário por CarlosGarcia

Carlos é minimo q posso fazer em comparação q a galera faz. E outra coisa pra aprender o melhor jeito é ensinando

Comentário por betofiote

Cara me desculpe mas tenho umas duvidas em relaçao ao seu codigo. Por favor me ajude a entender ^^

public function EventMenuJanela(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
Esse super() quer dizer que a nova clase tera todas as propriedades e metodos do classe pai?
_______________________________________________

override public function clone():Event {
return new EventMenuJanela ( type );
}
}
}
Porque vc sobrescreve a clone()?
_______________________________________________

systemManager.addEventListener(”janela”,abreJanela);
Essa função abrirá uma janela MDI especifica certo? poderia postar como ficou a função abreJanela? ^^
______________________________________________
No geral eu entendi que vc customizou um evento e
atrelou a ele a execução da função abre janela certo?

Desculpe novamente se estiver sendo chato, mas tenho muita sede de entender como isso funciona e já estou ficando louco aqui ^^

Desde já muito obrigado.

Comentário por Eliézer

Só para registrar meu e-mail correto, no post anterior eu errei no dominio.

Comentário por Eliézer

Olá Beto!
Cara estou com umas duvidas aqui poderia me ajudar a entender melhor seu codigo? ^^

Acredito que na função abreJanela vc faça chamdas aos metodos set e get janela certo? poderia postar como ficou sua função abreJanela?
__________________________________________________

super(type, bubbles, cancelable);
esse super ai seria pra herdar os metodos da super classe?
__________________________________________________

override public function clone():Event {
return new EventMenuJanela ( type );
}
}
}
Pq é necessario sobrescrever esse metodo?
_________________________________________________

Desculpe se estou sendo chato, mas quero
realmente entender como tudo isso funciona e já estou ficando louco aqui, a cada codigo que leio me confundo mais ^^

Desde já obrigado!

Eliézer.

Comentário por Eliézer

Eliézer

Essa função ela é responsavel por atualizar a chamada clone do evento, se não reescrever ela, qdo vc clonar o evento ele vai retornar o evento da classe pai.

Comentário por betofiote

Valeu cara, ajudou bastante.

Comentário por Cristian




Deixe um comentário
Linhas e parágrafos quebram automaticamente, endereços de email não serão mostrados, HTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>