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容器中,运行项目
分享到:
相关推荐
这可能包括数据缓存、最小化数据模型、数据压缩等策略。源码可能涵盖如何创建和管理AMF(Action Message Format)或XML数据结构,这些格式通常用于高效地在Flex客户端和服务器之间传输数据。 5. **事件驱动编程**:...
5. **数据模型**:在Flex客户端,定义数据模型类,它们通常与数据库表结构相对应。数据模型类可以通过数据绑定直接与UI组件关联。 6. **调用服务并处理响应**:在Flex中,通过事件驱动的方式调用后台服务。当服务...
Flex中的MVC模式是一种软件设计模式,用于组织和分离应用程序中的业务逻辑、用户界面和数据模型。MVC代表Model(模型)、View(视图)和Controller(控制器)。这种模式在Flex开发中尤其重要,因为它有助于创建可...
1. **设置Flex客户端**:创建Flex项目,引入FlexSpring库,配置服务代理,定义数据模型和事件处理。 2. **配置Spring服务**:在Spring配置文件中定义需要暴露的服务,包括Bean定义和服务接口。 3. **配置AMF ...
在Flex中,数据管理通常涉及数据绑定,它允许视图组件自动反映模型的变化。CairngormStore可能包含了一个数据存储模型,演示了如何创建可扩展和灵活的数据管理机制。此外,它还可能展示了事件驱动编程的概念,这是...
Flex提供了强大的数据模型和数据绑定机制,可以轻松实现这些功能。 Flex与WebService的集成还可以利用AMF(Action Message Format)进行优化。AMF是一种二进制的序列化格式,能提高数据传输效率。通过使用BlazeDS或...
8. **Flex数据服务**:Flex提供了诸如BlazeDS和LiveCycle Data Services这样的数据服务,它们可以轻松地将Flex应用程序与后端数据库集成,支持双向数据绑定,实时数据推送等功能。 9. **安全性与优化**:在实际项目...
5. **创建ActionScript数据模型**:在Flex中创建ActionScript类,它们与Spring中的Java Bean相对应,用于在客户端和服务器之间传递数据。 6. **使用Flex与Spring通信**:在Flex客户端,通过BlazeDS服务代理调用...
2. **数据绑定**:Flex支持数据绑定,这意味着你可以直接将数据模型与界面组件关联,当数据发生变化时,界面会自动更新。这对于实时仪表盘至关重要,因为数据可能频繁变动。 3. **图表组件**:Flex提供了一系列图表...
例如,查看`src`目录下的源码可以学习如何定义数据模型、数据提供者、以及自定义footer栏的实现方式。 6. **实践应用**: 通过实例学习,开发者可以掌握如何将FooterSpark DataGrid集成到实际应用中,包括数据绑定、...
SSH(Spring、Struts和Hibernate)框架是Java Web开发中的常用组合,用于处理MVC(模型-视图-控制器)架构、业务逻辑和数据持久化。 在Java连接Flex的场景中,通常使用AMF(Action Message Format)协议来实现高效...
模型处理数据逻辑,视图负责显示数据,而控制器作为两者之间的桥梁,处理用户交互并更新模型和视图。Cairngorm扩展了这个概念,增加了服务定位器、事件代理、命令和远程代理等组件,使得在Flex中构建复杂应用更为...
Flex支持强大的数据模型和数据绑定机制。可以将服务调用的结果直接绑定到UI组件,使得数据的更新和展示变得简单直观。 6. **错误处理** 调用Web服务时可能会出现各种错误,如网络问题、服务不可用等。在Flex中,...
2. **视图(View)**:显示用户界面,通常由Flex组件构成,负责呈现模型数据。 3. **控制器(Controller)**:作为模型和视图之间的桥梁,处理用户交互事件,更新模型或视图。 4. **命令(Command)**:用于处理特定业务...
在Flex BlazDS中,封装实体是将后端数据库中的数据模型映射到Flex客户端的一种方式。这种映射使得Flex应用可以方便地展示、操作和保存后端的数据,而无需关心底层数据库的实现细节。封装实体通常涉及以下步骤: 1. ...
4. 定义一个Flex数据模型类,与Java的用户对象对应。 5. 调用服务代理的方法获取用户列表,数据会自动映射到Flex的数据模型中。 6. 在Flex UI中展示用户列表,实现动态交互。 集成Flex和Java EE不仅可以利用两者的...
通过FlexSpring,可以轻松地将Flex的事件驱动模型与Spring的服务进行连接,实现动态数据更新和用户交互。 3. `myFriends`:这个名字暗示了一个关于社交网络或联系人管理的示例。这个例子可能展示了如何使用Flex...
在Flex客户端,监听消息代理的事件,更新UI展示新数据。 6. 测试和优化: 运行项目并测试Push功能。可能需要调整连接超时、重试策略以及错误处理,以确保在各种网络条件下的稳定性。 通过这种方式,我们可以利用...
Spring Flex 将 Spring MVC 模型与 Flex 应用程序中的数据模型进行绑定,通过 BlazeDS 或 LCDS 实现 AMF 通信。 三、Spring Flex 组件结构 1. `flex-messaging-spring`:这是 Spring Flex 的核心模块,它包含 ...
此外,还会涉及数据绑定,它是Flex中连接UI组件和数据模型的关键技术。 第6章:服务与数据访问 在这一章,你将学习如何使用Flex与后端服务进行通信,包括SOAP和RESTful Web服务。你将了解AMF(Action Message ...