Eventos personalizados interagindo entre telas

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

Sobre betofiote

Sou de Brasília-DF, tenho 30, casado e com 2 filhos. Comecei na área de programação desktop com VB 6.0 em 1997, numa fábrica multinacional Ambev. Logo após fui para empresa de automação comercial, a qual tinha software em diversas áreas, entre elas: oficina mecânica, material de construção, posto de gasolina, hotel e varejo em geral. Como numa empresa de pequeno porte, assumi diversas tarefas, além de programar em VB 6, administrava o banco Ms SQL Server 2000 e ainda fazia o atendimento ao cliente no suporte. Com o passar do tempo vi que a programação para desktop muito difícil a distribuição e manutenção, foi ai que decidir me dedicar a aplicações web. Em 2003 comecei o com .NET, mas a camada visual deixava um pouco a desejar. Comecei a pesquisar na net encontrei o OpenLaszlo, mas devido a pouca utilização, falta de material e sua limitação a comunicação com o back-end, me encantei pelo flex, devido a força da comunidade e a documentação, fiz o curso de flex na e-Genial. E estou tocando um projeto financeiro, usando flex, blazeDS, java, hibernate, jpa e banco de dados. Atualmente sou consultor/desenvolvedor Flex / Java na Conab, alocado em um projeto de migração do sistema de faturamento ja usando o sdk 4.5

12 Responses to “Eventos personalizados interagindo entre telas”

  1. CarlosGarcia says :

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

  2. betofiote says :

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

  3. Eliézer says :

    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.

  4. Eliézer says :

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

  5. Eliézer says :

    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.

  6. betofiote says :

    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.

  7. Yelken Heckman says :

    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

  8. Cristian says :

    Valeu cara, ajudou bastante.

  9. Ricardo says :

    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

    • betofiote says :

      Ricardo,

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

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.