`
liaokang.java
  • 浏览: 155167 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Flex之数据模型代理

    博客分类:
  • Flex
阅读更多
PureMVC是一个定位于高性能RIA客户端的基于模式的框架,现在已经被移植到大多数流行的开发平台,包括Flash,PHP,java,C#等
PureMVC模式简介
控制中心--Facade类
通信机制--广播式的通信机制,接受者只要注册标识与广播消息的标识一致,就会接收消息
逻辑命令处理--Command类
视图控制--Mediator类
数据模型代理--Proxy类

Proxy类封装了数据模型,管理Data Object及对Data Object的访问,不管数据来自哪里,什么类型,在PureMVC中,Proxy是个被Model注册的简单的数据持有者,虽然Proxy类已经完全可用的了,但是对于具体的应用应该编写Proxy的子类,增加操作方法

下面这个例子是针对Proxy类,创建一个显示部门信息的网格列表
首先新建一个Flex project,并将PureMVC框架的相关类文件拷贝到flex_src目录下,我是直接将PureMVC中的org文件夹拷贝到flex_src目录下

1.新建一个ApplicationFacade类,并继承Facade,代码如下
package lalo
{
	import org.puremvc.as3.patterns.facade.Facade;
	import lalo.controller.StartupCommand;

	public class ApplicationFacade extends Facade
	{
		public static const STARTUP:String = "startup";
		
		public static function getInstance():ApplicationFacade
		{
			if(instance == null)
			{
				instance = new ApplicationFacade();
			}
			return instance as ApplicationFacade;
		}		
		
		override protected function initializeController():void
		{
			super.initializeController();
			//注册控制器StartupCommand类
			//使得常量STARTUP与StartupCommand类关联在一起
			registerCommand(STARTUP,StartupCommand);
		}
		
		public function startup(app:Object):void
		{
			//由于常量STARTUP与StartupCommand类关联在一起了
			//此时会调用StartupCommand类的execute方法
			sendNotification(STARTUP,app);
		}
		
	}
}


2.新建一个StartupCommand类,继承自SimpleCommand类,代码如下
package lalo.controller
{
	import org.puremvc.as3.interfaces.INotification;
	import org.puremvc.as3.patterns.command.SimpleCommand;
	import lalo.model.DeptProxy;
	import lalo.view.DeptListMediator;

	public class StartupCommand extends SimpleCommand
	{
		public function StartupCommand()
		{
			super();
		}
		
		override public function execute(notification:INotification):void
		{
			//注册代理类
			facade.registerProxy(new DeptProxy());
			//获取main实例
			var app:main = notification.getBody() as main;
			//注册数据模型类
			facade.registerMediator(new DeptListMediator(app.deptList));
		}
		
	}
}


3.新建一个DeptProxy,继承自Proxy类并实现IProxy接口,在类中填充数据到数据模型中,代码如下
package lalo.model
{
	import lalo.model.vo.DeptVO;
	
	import mx.collections.ArrayCollection;
	
	import org.puremvc.as3.interfaces.IProxy;
	import org.puremvc.as3.patterns.proxy.Proxy;

	public class DeptProxy extends Proxy implements IProxy
	{
		public static const NAME:String = "Dept";
		public function DeptProxy()
		{
			super(NAME, new ArrayCollection());
			addItem(new DeptVO("01","人事部"));
			addItem(new DeptVO("02","财政部"));
			addItem(new DeptVO("03","开发部"));
			addItem(new DeptVO("04","网络部"));
		}
		
	public function get depts():ArrayCollection
	{
		return data as ArrayCollection;
	}
	
	public function addItem(item:Object):void
	{
		depts.addItem(item);
	}
		
	}
}


4.新建一个DeptVO类,创建两个字段,代码如下
package lalo.model.vo
{
	[Bindable]
	public class DeptVO
	{
		public var deptID:String = '';
		public var deptName:String = '';
		public function DeptVO(_deptID:String=null, _deptName:String=null)
		{
			if(_deptID != null)
			{
				this.deptID = _deptID;
			}
			if(_deptName != null)
			{
				this.deptName = _deptName;
			}
		}

	}
}


5.新建一个DeptListMediator类,继承自Mediator类,代码如下
package lalo.view
{
	import lalo.model.DeptProxy;
	
	import org.puremvc.as3.patterns.mediator.Mediator;

	public class DeptListMediator extends Mediator
	{
		private var deptProxy:DeptProxy;
		public static const NAME:String = 'DeptListMediator';
		public function DeptListMediator(viewComponent:Object=null)
		{
			super(NAME, viewComponent);
			//注册获得代理对象
			deptProxy = facade.retrieveProxy(DeptProxy.NAME) as DeptProxy;
			//设置用户列表
			userList.depts = deptProxy.depts;
		}
		
		private function get userList():DeptList
		{
			return viewComponent as DeptList;
		}
		
	}
}


6.创建一个DeptList组件文件,代码如下
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			[Bindable]
			public var depts:ArrayCollection;
		]]>
	</mx:Script>
	
	<mx:DataGrid dataProvider="{depts}" fontSize="15">
		<mx:columns>
			<mx:DataGridColumn headerText="部门编号" dataField="deptID"/>
			<mx:DataGridColumn headerText="部门名称" dataField="deptName"/>
		</mx:columns>
	</mx:DataGrid>
</mx:Canvas>



7.在程序入口文件main.xml中引入ApplicationFacade类,并调用其startup()方法,代码如下
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	creationComplete="facade.startup(this)" xmlns:local="*">
	<mx:Script>
		<![CDATA[
			import lalo.ApplicationFacade;
			private var facade:ApplicationFacade = ApplicationFacade.getInstance();
		]]>
	</mx:Script>
	<local:DeptList id="deptList" x="99" y="52"/>
</mx:Application>



最后将项目部署到tomcat容器中,运行项目
分享到:
评论

相关推荐

    flex之低数据量通信实例源码

    这可能包括数据缓存、最小化数据模型、数据压缩等策略。源码可能涵盖如何创建和管理AMF(Action Message Format)或XML数据结构,这些格式通常用于高效地在Flex客户端和服务器之间传输数据。 5. **事件驱动编程**:...

    Flex如何让前台链接后并访问数据库

    5. **数据模型**:在Flex客户端,定义数据模型类,它们通常与数据库表结构相对应。数据模型类可以通过数据绑定直接与UI组件关联。 6. **调用服务并处理响应**:在Flex中,通过事件驱动的方式调用后台服务。当服务...

    flex的mvc模式

    Flex中的MVC模式是一种软件设计模式,用于组织和分离应用程序中的业务逻辑、用户界面和数据模型。MVC代表Model(模型)、View(视图)和Controller(控制器)。这种模式在Flex开发中尤其重要,因为它有助于创建可...

    FlexSpring jar包

    1. **设置Flex客户端**:创建Flex项目,引入FlexSpring库,配置服务代理,定义数据模型和事件处理。 2. **配置Spring服务**:在Spring配置文件中定义需要暴露的服务,包括Bean定义和服务接口。 3. **配置AMF ...

    flex官方经典实例

    在Flex中,数据管理通常涉及数据绑定,它允许视图组件自动反映模型的变化。CairngormStore可能包含了一个数据存储模型,演示了如何创建可扩展和灵活的数据管理机制。此外,它还可能展示了事件驱动编程的概念,这是...

    Flex调用WebService进行数据查询和显示(调整)

    Flex提供了强大的数据模型和数据绑定机制,可以轻松实现这些功能。 Flex与WebService的集成还可以利用AMF(Action Message Format)进行优化。AMF是一种二进制的序列化格式,能提高数据传输效率。通过使用BlazeDS或...

    Flex Resolve

    8. **Flex数据服务**:Flex提供了诸如BlazeDS和LiveCycle Data Services这样的数据服务,它们可以轻松地将Flex应用程序与后端数据库集成,支持双向数据绑定,实时数据推送等功能。 9. **安全性与优化**:在实际项目...

    flex+blazeds+spring

    5. **创建ActionScript数据模型**:在Flex中创建ActionScript类,它们与Spring中的Java Bean相对应,用于在客户端和服务器之间传递数据。 6. **使用Flex与Spring通信**:在Flex客户端,通过BlazeDS服务代理调用...

    Flex实现动态仪表盘

    2. **数据绑定**:Flex支持数据绑定,这意味着你可以直接将数据模型与界面组件关联,当数据发生变化时,界面会自动更新。这对于实时仪表盘至关重要,因为数据可能频繁变动。 3. **图表组件**:Flex提供了一系列图表...

    Flex FooterSpark DataGrid 表格制作

    例如,查看`src`目录下的源码可以学习如何定义数据模型、数据提供者、以及自定义footer栏的实现方式。 6. **实践应用**: 通过实例学习,开发者可以掌握如何将FooterSpark DataGrid集成到实际应用中,包括数据绑定、...

    java连接flex代码

    SSH(Spring、Struts和Hibernate)框架是Java Web开发中的常用组合,用于处理MVC(模型-视图-控制器)架构、业务逻辑和数据持久化。 在Java连接Flex的场景中,通常使用AMF(Action Message Format)协议来实现高效...

    Flex Cairngorm之旅(小项目实例)

    模型处理数据逻辑,视图负责显示数据,而控制器作为两者之间的桥梁,处理用户交互并更新模型和视图。Cairngorm扩展了这个概念,增加了服务定位器、事件代理、命令和远程代理等组件,使得在Flex中构建复杂应用更为...

    Flex调用Webservice及java程序

    Flex支持强大的数据模型和数据绑定机制。可以将服务调用的结果直接绑定到UI组件,使得数据的更新和展示变得简单直观。 6. **错误处理** 调用Web服务时可能会出现各种错误,如网络问题、服务不可用等。在Flex中,...

    Flex框架Cairngorm经典案例源码

    2. **视图(View)**:显示用户界面,通常由Flex组件构成,负责呈现模型数据。 3. **控制器(Controller)**:作为模型和视图之间的桥梁,处理用户交互事件,更新模型或视图。 4. **命令(Command)**:用于处理特定业务...

    Flex blazeds封装实体

    在Flex BlazDS中,封装实体是将后端数据库中的数据模型映射到Flex客户端的一种方式。这种映射使得Flex应用可以方便地展示、操作和保存后端的数据,而无需关心底层数据库的实现细节。封装实体通常涉及以下步骤: 1. ...

    Flex 集成到Java EE 应用

    4. 定义一个Flex数据模型类,与Java的用户对象对应。 5. 调用服务代理的方法获取用户列表,数据会自动映射到Flex的数据模型中。 6. 在Flex UI中展示用户列表,实现动态交互。 集成Flex和Java EE不仅可以利用两者的...

    flexspring

    通过FlexSpring,可以轻松地将Flex的事件驱动模型与Spring的服务进行连接,实现动态数据更新和用户交互。 3. `myFriends`:这个名字暗示了一个关于社交网络或联系人管理的示例。这个例子可能展示了如何使用Flex...

    Flex与java Server Push数据

    在Flex客户端,监听消息代理的事件,更新UI展示新数据。 6. 测试和优化: 运行项目并测试Push功能。可能需要调整连接超时、重试策略以及错误处理,以确保在各种网络条件下的稳定性。 通过这种方式,我们可以利用...

    spring-flex-1.0.1.RELEASE

    Spring Flex 将 Spring MVC 模型与 Flex 应用程序中的数据模型进行绑定,通过 BlazeDS 或 LCDS 实现 AMF 通信。 三、Spring Flex 组件结构 1. `flex-messaging-spring`:这是 Spring Flex 的核心模块,它包含 ...

    Flex从入门到实践——源代码(2,5,6,7章)

    此外,还会涉及数据绑定,它是Flex中连接UI组件和数据模型的关键技术。 第6章:服务与数据访问 在这一章,你将学习如何使用Flex与后端服务进行通信,包括SOAP和RESTful Web服务。你将了解AMF(Action Message ...

Global site tag (gtag.js) - Google Analytics