Lá no LoginForm.mxml vc pode criar um callback q será acionado pelo
controller

[Mediate(event="UsuarioEvent.USUARIO_LOGADO", properties="usuarioLogado")]
public function usuarioLogadoCallback(uusario:Usuario):void {
   //aqui vc recebe o mesmo evento q disparou lá do controller, sacou?
}

Ou poderia colocar isso no presentation model tb, pode ser.


O "cilo de vida" é mais ou menos assim:

1) view dispara evento
2) controller recebe evento mediando-o (mediate), e logo dispara chamada
para back-end
3) o controller ainda trata o resultado do back-end e dispara outro evento
para notificar a view (callback)
4) a view vai "ouvir" o evento do controller e mediá-lo (mediate), tomando o
comportamento q vc desejar.

Isso é uma das formas, outra forma (a que usavamos 'antigamente') seria
controlar por meio de atributos no model, mas isso implicava em criar muitos
atributos de controle de view nos models, coisa q incomodava muito até o
pessoal do Swiz Team, por isso criaram esse esquema de callback
reaproveitando o central dispatcher e a criação dinamica de mediators.


[]s









Em 2 de outubro de 2010 14:00, Leonardo Ribeiro <leojribe...@gmail.com>escreveu:

> Pessoal,
>
> Estou começando com o Swiz + Flex4 e estou tendo uma dificuldade em relação
> a quando e como fechar uma janela, no caso específico, a janela de Login.
>
> Segue abaixo:
>
> *main.mxml*
>
>
> <?xml version="1.0" encoding="utf-8"?>
> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009";
>    xmlns:s="library://ns.adobe.com/flex/spark"
>    xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"
> minHeight="600"
>    xmlns:view="r2.view.*"
>    xmlns:config="r2.config.*"
>    creationComplete="{init()}">
> <fx:Style source="main.css"/>
>  <fx:Declarations>
> <config:SwizConfig/>
> <s:BasicLayout/>
>  </fx:Declarations>
>  <fx:Script>
>  <![CDATA[
> import mx.managers.PopUpManager;
>  import r2.view.LoginForm;
>  private function init():void {
>  var form:LoginForm = new LoginForm();
> PopUpManager.addPopUp(form, this, true);
>  PopUpManager.centerPopUp(form);
> }
>  ]]>
> </fx:Script>
> </s:Application>
>
>
>
> *LoginForm.mxml*
>
> <?xml version="1.0" encoding="utf-8"?>
> <s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009";
>  xmlns:s="library://ns.adobe.com/flex/spark"
>  xmlns:mx="library://ns.adobe.com/flex/mx" width="286" height="142"
> title="R2 - Login" skinClass="spark.skins.spark.PanelSkin">
>  <s:layout>
> <s:VerticalLayout/>
> </s:layout>
>  <fx:Declarations>
>
> </fx:Declarations>
>  <fx:Script>
> <![CDATA[
> import mx.rpc.remoting.RemoteObject;
>  import r2.model.presentation.LoginPM;
>  [Inject(source="loginPM")]
> [Bindable]
> public var loginPM:LoginPM;
>
> ]]>
> </fx:Script>
>  <mx:Form width="100%" height="114" >
> <mx:FormItem label="Usuário" width="250" required="true">
>  <s:TextInput width="100%" id="tfUsuario"/>
> </mx:FormItem>
>  <mx:FormItem label="Senha" width="250" required="true">
> <s:TextInput width="100%" displayAsPassword="true" id="tfSenha"/>
>  </mx:FormItem>
> <mx:FormItem width="250" horizontalAlign="right">
>  <s:Button label="Entrar" id="btnLogin"
> click="{loginPM.btnLogin(tfUsuario.text, tfSenha.text)}"/>
> </mx:FormItem>
>  </mx:Form>
> </s:Panel>
>
>
> *LoginPM.as*
> *
> *
> *
> [Bindable]
>  public class LoginPM {
>
> [Dispatcher]
>  public var dispatcher:IEventDispatcher;
>
> public var usuario:Usuario;
>
> public function LoginPM() {
>  this.usuario = new Usuario;
>  }
>
>  public function btnLogin(login:String, senha:String):void {
>  var usuarioEvent:UsuarioEvent = new UsuarioEvent(UsuarioEvent.LOGIN);
>  usuario.login = login;
>  usuario.senha = senha;
>  usuarioEvent.usuario = usuario;
>  this.dispatcher.dispatchEvent(usuarioEvent);
>  }
> }
> *
>
>
> *LoginController.as*
>
> package r2.controller
> {
> import flash.events.IEventDispatcher;
>  import mx.collections.ArrayCollection;
> import mx.controls.Alert;
>  import mx.rpc.events.FaultEvent;
> import mx.rpc.events.ResultEvent;
> import mx.rpc.remoting.RemoteObject;
>  import org.swizframework.utils.services.ServiceHelper;
>  import r2.event.UsuarioEvent;
> import r2.model.entities.Usuario;
>  import spark.components.Application;
>  public class LoginController {
>  [Dispatcher]
> public var dispatcher:IEventDispatcher;
>  [Inject(source="serviceHelper")]
> public var serviceHelper:ServiceHelper;
>  [Inject(source="usuarioService")]
> public var usuarioService:mx.rpc.remoting.RemoteObject;
>
> //----------------------------------------------------------------------
>  public function LoginController() {}
>
> //----------------------------------------------------------------------
>  [Mediate(event="UsuarioEvent.LOGIN", properties="usuario")]
>  public function login(usuario:Usuario):void {
> this.serviceHelper.executeServiceCall(
>  usuarioService.login(usuario.login, usuario.senha),
> usuarioService_login_resultHandler,
>  usuarioService_faultHandler
> );
> }
>  //----------------------------------------------------------------------
>  // handlers
> private function usuarioService_faultHandler(event:FaultEvent):void {
>  Alert.show(event.fault.message, "Erro comunicação BlazeDS");
> }
>  private function
> usuarioService_login_resultHandler(event:ResultEvent):void {
>                         *//Aqui tenho o retorno do login OK...precisaria
> setar o usuario logado do sistema e fechar o Panel de login*
> var usuarioEvent:UsuarioEvent = new UsuarioEvent(
> UsuarioEvent.USUARIO_LOGADO );
>  usuarioEvent.usuarioLogado = event.result as Usuario;
> this.dispatcher.dispatchEvent(usuarioEvent);
>  }
> }
> }
>
>
>
> --
> []'s
> Leonardo
>
> Linux User #488650
> Ubuntu User #27045
> Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece
>
> --
> 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




-- 
Mario Junior
http://blog.mariojunior.com/
@mariojunior

-- 
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