Valeu Mário... 2010/10/2 Mário Júnior <juninho...@gmail.com>
> 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 -- []'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