`
vyyv
  • 浏览: 17589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

网络相册开发(9)——使用Flex的TitleWindow制作登录框

    博客分类:
  • Flex
阅读更多

在这个应用里我将使用对话框来实现用户登录,采用Flex中TitleWindow控件来实现。

 

流程如下:显示输入用户名密码的登陆框——》输入用户名密码,点击确定按钮激活登录事件——》LoginCommand调用UserDelegate处理这个事件——》LoginCommand根据UserDelegate返回的结果修改AlbumModelLocater——》页面监听AlbumModelLocater,根据值的变化对页面进行调整

 

首先设计登录框LoginWindow.mxml的布局



 {info}为错误提示

 

应用第一次加载时显示对话框

main.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	... ...
	  creationComplete="init()">
<mx:Script>
	<![CDATA[
		import net.sw.album.model.AlbumModelLocater;
		import net.sw.album.view.tilteWindow.LoginWindow;
		import mx.managers.PopUpManager;
		
		
		[Bindable]
		public var model:AlbumModelLocater=AlbumModelLocater.getInstance();
		
		public var login_win:LoginWindow;
		
		private function init():void{
			if(model.ownerId==0){
				login_win=LoginWindow(PopUpManager.createPopUp(this,LoginWindow,true));
			 		
			 		login_win.title="登录";
 		
			 		PopUpManager.centerPopUp(login_win);

			}
			
		}
		
.... ....		
	]]>
</mx:Script>

.... ....
</mx:Application>

 AlbumModelLocater中ownerId的初始值为0,

LoginWindow(PopUpManager.createPopUp(this,LoginWindow,true))创建LoginWindow对话框,父容器为this,这里就是Application

PopUpManager.centerPopUp(login_win)居中显示对话框,注意是相对它的父容器居中


确定按钮提交用户名密码,取消按钮清空数据

LoginWindow.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="262" height="198">
<mx:Script>
	<![CDATA[
		import net.sw.album.event.LoginEvent;
		import com.adobe.cairngorm.control.CairngormEventDispatcher;
		import net.sw.album.model.AlbumModelLocater;
		
		[Bindable]
		public var info:String="";
		
		public var model:AlbumModelLocater=AlbumModelLocater.getInstance();
		
		private function submit():void{
			var event:LoginEvent=new LoginEvent();
			event.username=username.text;
			event.password=password.text;
			
			CairngormEventDispatcher.getInstance().dispatchEvent(event);

		}
		
		private function cancle():void{
			username.text="";
			password.text="";
		}
		
		public function loginfalse():void{
			info="用户名密码不匹配";
		}
	]]>
</mx:Script>	
	<mx:Form x="10" y="10" width="212" height="92">
		<mx:FormItem label="用户名">
			<mx:TextInput id="username" width="124"/>
		</mx:FormItem>
		<mx:FormItem label="密码">
			<mx:TextInput id="password" width="125"/>
		</mx:FormItem>
	</mx:Form>
	<mx:Button x="109" y="110" label="确定" click="submit()"/>
	<mx:Button x="165" y="110" label="取消" click="cancle()"/>
	<mx:FormItem label="{info}"  color="#ff0000" width="173" x="26" y="94">
	</mx:FormItem>
	
</mx:TitleWindow>

 单击确定按钮引发LoginEvent事件,注意Cairngorm中自定义事件的发送方式CairngormEventDispatcher.getInstance().dispatchEvent(event);

这里的取消按钮只有清空作用,不会关闭登录框,如果希望关闭登陆框可添加

PopUpManager.removePopUp(this);

 

LoginEvent.as

package net.sw.album.event
{
	import com.adobe.cairngorm.control.CairngormEvent;

	public class LoginEvent extends CairngormEvent
	{
		public static var EVENT_LOGIN:String="login";
		
		public var username:String;
		public var password:String;
				
		public function LoginEvent()
		{
			super(EVENT_LOGIN);
		}
		
	}
}

 

事件映射命令

在AlbumController.as中添加

addCommand(LoginEvent.EVENT_LOGIN,LoginCommand);

 

LoginCommand.as

package net.sw.album.command
{
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	
	import mx.rpc.IResponder;
	
	import net.sw.album.business.UserDelegate;
	import net.sw.album.event.LoginEvent;
	import net.sw.album.model.AlbumModelLocater;

	public class LoginCommand implements ICommand, IResponder
	{
		public function LoginCommand()
		{
		}

		public function execute(event:CairngormEvent):void
		{
			var userDelegate:UserDelegate=new UserDelegate(this);
			userDelegate.Login(LoginEvent(event).username,LoginEvent(event).password);
		}
		
		public function result(event:Object):void
		{
			var userid:Number= Number(event.result);
			var albumModelLocater : AlbumModelLocater = AlbumModelLocater.getInstance();
             
			albumModelLocater.ownerId=userid;
		}
		
		public function fault(info:Object):void
		{
		}
		
	}
}

 不知道各位注意到没有,我这个应用的java部分没有关于用户的模块,这是因为用户管理我计划使用以往的一个成熟案例中的模块,还没有整合。这里我在java端写了一个简单的用户服务,提供给Flex远程调用,这个服务没有连接数据库,数据也是写死的,不值一提,就不拿出来了。

 

LoginCommand调用UserDlegate验证用户名密码,这里返回结果是用户的ID(和用户系统整合后返回用户对象),如果用户名密码错误放回-1。返回值将被附给albumModelLocater.ownerId

 

界面捕捉albumModelLocater.ownerId的改变

修改main.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:view="net.sw.album.view.*"
	xmlns:business="net.sw.album.business.*"
	xmlns:controller="net.sw.album.controller.*"
	xmlns:util="net.sw.album.util.*"
	 layout="absolute"
	 backgroundGradientColors="[#ffffff, #ffffff]" 
	  creationComplete="init()">
<mx:Script>
	<![CDATA[
		import net.sw.album.model.AlbumModelLocater;
		import net.sw.album.view.tilteWindow.LoginWindow;
		import mx.managers.PopUpManager;
		
		[Bindable]
		public var model:AlbumModelLocater=AlbumModelLocater.getInstance();
		
		public var login_win:LoginWindow;
		
		private function init():void{
			if(model.ownerId==0){
				login_win=LoginWindow(PopUpManager.createPopUp(this,LoginWindow,true));
			 		
			 		login_win.title="登录";
 		
			 		PopUpManager.centerPopUp(login_win);

			}
			
		}
		
		private function logined():void{
			trace(model.ownerId);
			if(model.ownerId==-1){
				login_win.loginfalse();
			}else if(model.ownerId!=0){
				PopUpManager.removePopUp(login_win); CairngormEventDispatcher.getInstance().dispatchEvent( new CairngormEvent( DisplayMyAlbumEvent.EVENT_DISPLAY_MYALBUM ) );
			}else{
				//login_win.loginfalse();
			}
		}
		
	]]>
</mx:Script>

	
	<!-- ========================================================================== -->
	
	<!-- the ServiceLocator where we specify the remote services -->
	<business:Services id="services" />
	
	<!-- the FrontController, containing Commands specific to this appliation -->
	<controller:AlbumController id="controller" />
	
	
	 <util:Observe
      source="{model.ownerId}"
      handler="{logined}" />	

<!-- ========================================================================== -->
	
	<mx:VBox x="10" y="0" height="600" width="100%">
		<mx:HBox width="100%" height="5%" >
			<view:Menu width="100%" height="100%"/>
		</mx:HBox>
		<mx:HBox width="100%" height="95%">
			<view:LeftArea width="20%" height="100%"/>
			<view:RightArea width="80%" height="100%"/>		 
		</mx:HBox>
	</mx:VBox>


</mx:Application>

 Observe.as

package net.sw.album.util
{ 
	public class Observe 
	{ 
		public var handler : Function; 
	 	
	 	public function Observe() : void
	 	{
	 		
	 	}
	 	
		public function set source( source : * ) : void 
	  	{ 
	        	handler.call(); 
	  	} 
	} 
}

  <util:Observe source="{model.ownerId}" handler="{logined}" />这个语句将监听model.ownerId值,如发生变化调用logined。model.ownerId等于-1登录失败,显示提示语句;model.ownerId等于其他值,登录成功,关闭登陆框PopUpManager.removePopUp(login_win);展示我的相册CairngormEventDispatcher.getInstance().dispatchEvent( new CairngormEvent( DisplayMyAlbumEvent.EVENT_DISPLAY_MYALBUM ) );

  • 大小: 17.5 KB
分享到:
评论

相关推荐

    flex TitleWindow自定义最大最小化

    在Flex编程中,TitleWindow是一种常用的组件,它用于创建具有标题栏、关闭、最小化和最大化按钮的标准窗口样式。在Flex应用中,我们可能需要对TitleWindow的行为进行自定义,例如改变其默认的最大化和最小化功能。本...

    flex TitleWindow之间数据传输

    ### Flex TitleWindow之间数据传输详解 在Flex框架中,实现主页面与弹出窗口之间的数据交互是一项常见且实用的功能。本文将深入解析如何利用TitleWindow组件进行数据传输,包括从主应用向弹出窗口传递数据以及反之...

    Flex TitleWindow父子页面的事件派发

    在Flex框架中,TitleWindow组件常用于创建有标题栏的窗口,这在开发复杂的用户界面时非常有用。本文将深入探讨如何在Flex的TitleWindow父子页面之间进行有效的事件派发,以及背后的事件机制,这对于理解和优化Flex...

    flex TitleWindow 放大、缩小、可缩放 弹出窗口

    Flex是Adobe开发的一种开源框架,主要用于构建富互联网应用程序(RIA)。TitleWindow是Flex中的一个组件,它是基于MX Containers的,通常用作具有标题和可选边框的独立窗口。在这个主题中,我们将深入探讨如何在Flex...

    flex4.6 可以拉伸的TitleWindow

    flex4.6 可以拉伸的TitleWindow。自由缩放。

    Flex带最大化最小化的TitleWindow

    Flex是Adobe Flex框架的一部分,它是一个用于构建富互联网应用程序(RIA)的开源开发工具。TitleWindow是Flex中的一种容器类,它类似于操作系统中的窗口,通常包含一个标题栏,可以显示标题,并提供一些基本操作,如...

    flex实现边框

    本篇文章将详细解释如何使用Flex来实现边框以及添加标题,并重点关注在标题框中显示文本的实现方法。 首先,我们需要了解Flex中的容器和组件。容器是Flex应用程序的基础,它们可以包含一个或多个组件,如按钮、文本...

    Flex中支持缩放的TitleWindow

    在Flex开发中,TitleWindow是一种常用的组件,它用于创建具有标题栏和可选边框的弹出窗口。这篇博客文章“Flex中支持缩放的TitleWindow”可能详细讲解了如何在Flex应用程序中实现TitleWindow组件的缩放功能,这对于...

    带最小化、最大化、关闭按钮的titlewindow

    在IT行业中,TitleWindow是一种常见的用户界面组件,尤其在富客户端应用或Web应用程序中,它作为窗口的基础容器,用于展示应用程序的主要内容。标题通常包含窗口的名称,有时也会包含一些操作按钮,如最小化、最大化...

    Flex-TitleWindow的弹出窗口中播放一段影像.zip

    Flex是Adobe公司开发的一种富互联网应用程序(RIA)框架,它基于ActionScript编程语言和MXML标记语言,用于创建具有交互性和动态效果的Web应用程序。TitleWindow是Flex中的一个组件,常用于创建带有标题的弹出窗口,...

    Flex titleWindow resize

    NULL 博文链接:https://176170847.iteye.com/blog/774691

    FLEX TitleWindow之间数据传输的示例

    Flex是Adobe公司推出的一个用于构建具有表现力的网络应用程序的开源框架。它使用ActionScript语言编写,利用Flash Player作为运行时环境。在Flex中,弹出窗口通常是使用TitleWindow组件来实现的。TitleWindow是一个...

    flex4自适应高度的TitleWindow

    这是一个flex4的项目,可以下载下来单独运行,项目中是一个自定义的TitleWindow,TitleWindow中存放了一个dataGrid,它可以根据dataGrid中数据行增加而改变自身高度,直至要最大高度。此组件使用mxml定义,重写了...

    titlewindow添加更多按钮

    flex中为titlewindow添加更多按钮,使其显示在标题栏右方

    flex监听浏览器关闭事件

    ### Flex监听浏览器关闭事件 在Web开发中,有时我们需要对用户关闭浏览器窗口的行为进行监听,并在用户尝试关闭页面时给出提示或执行某些操作。本文将详细介绍如何利用Flex结合JavaScript实现这一功能。 #### 1. ...

    Flex带最大化最小化按钮可拖动调整窗口大小的TitleWindow

    在Flex开发中,TitleWindow是一种常用的组件,它用于创建具有标题栏和关闭、最小化、最大化按钮的独立窗口。这个特定的示例是关于如何在Flex中创建一个TitleWindow,该窗口不仅具备基本的窗口操作功能,还允许用户...

    flex开发实例

    根据给定文件的信息,我们可以提炼出一系列关于Flex开发的关键知识点,包括Flex的基础概念、MXML与ActionScript的基本用法以及一些具体的控件和功能实现。下面将详细展开这些知识点: ### Flex简介 Flex是一种用于...

    Flex特效_可拖动弹出窗口布局容器TitleWindow.zip )

    Flex特效_可拖动弹出窗口布局容器TitleWindow.zip )

    flex开发自定义控件

    ### Flex开发自定义控件详解 Flex是一种强大的框架,用于构建高性能、丰富的互联网应用程序(RIA)。自定义控件是Flex开发中的一个重要方面,它允许开发者根据特定需求创建独特的UI组件,从而增强应用的功能性和...

Global site tag (gtag.js) - Google Analytics