Valeu Mário...
2010/10/2 Mário Júnior <[email protected]>
> 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
> <[email protected]>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 [email protected]
>> Para sair da lista, envie um email em branco para
>> [email protected]
>> 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 [email protected]
> Para sair da lista, envie um email em branco para
> [email protected]
> 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 [email protected]
Para sair da lista, envie um email em branco para
[email protected]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev