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);
}


10 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

Olá beto queria te parabenizar pelo blog e pelo projeto WEB Inovações achei muito legal tuas ideias, me deparei com uma duvida e resolvi entrar em contato com você.

No projeto Web Inovações você tem uma opção multi telas onde dá a opção de quatro desktops então queria saber se você utilizou algum componente ou tem alguma logica especifica.

Grato

Yelken Heckman
Programador Visual

Comentário por Yelken Heckman

Valeu cara, ajudou bastante.

Comentário por Cristian

Gostei do seu projeto http://www.webinovacoes.com.br/ sera que tinha como disponibilizar o codigo fonte do sistema ou passar um exemplo da tela principal junto com os menus. Desde ja agradeco

Comentário por Ricardo

Ricardo,

Essa é uma aplicação comercial, ainda não tive tempo para disponibilizar partes do codigo.

Comentário por betofiote




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>