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容器中,运行项目
S32K344 Bootloader实战:一个按键实现从Boot到App的无缝跳转(附完整代码) 本文详细介绍了基于NXP S32K344微控制器的Bootloader开发实战,重点解析如何通过一个硬件按键实现从Boot到App的可靠跳转。内容涵盖内存分区规划、中断向量表重映射、外设初始状态管理等核心要素,并提供了完整的代码示例和调试技巧,适用于汽车电子和工业控制等高可靠性应用场景。 阅读详情

相关推荐

5分钟搞定单细胞marker基因气泡图:scDotPlot保姆级教程(含Seurat适配)

本文提供了一份详细的scDotPlot R包使用教程,帮助用户在5分钟内完成单细胞marker基因气泡图的绘制。教程涵盖环境准备、Seurat和SingleCellExperiment对象的适配处理、进阶可视化技巧及自动化报告生成,特别适合生物信息学新手和临床研究者快速掌握这一高效的可视化工具。

weixin_29047545的博客 261

flex的代理绑定类

数据绑定不能直接使用数组,如Array,因为数组不能分发导致用户界面更新事件。 ObjectProxy是为Object准备的代理, XMLListCollection是为XMLList准备的代理, ArrayCollection是为Array准备的代理,这里Array有两种代理:一个是ArrayCollection(不仅支持数据绑定,还具有排序、筛选和快速数据查询等功能),另一个是Array...

bigbird365的博客 199

高通camx架构学习(零)—— 深入理解Camera 硬件抽象层

从上面的定义可以看出,主要是通过hw_module_t 代表了模块,通过其open方法用来打开一个设备,而该设备是用hw_device_t来表示,其中除了用来关闭设备的close方法外,并无其它方法,由此可见谷歌定义的HAL接口,并不能满足绝大部分HAL模块的需要,所以谷歌想出了一个比较好的解决方式,那便是将这两个基本结构嵌入到更大的结构体内部,同时在更大的结构内部定义了各自模块特有的方法,用于实现模块的功能,这样,一来对上保持了HAL的统一规范,二来也扩展了模块的功能。

图像学习之旅 1668

pureMVC摘抄以及容易忽略的地方

首先:pureMVC既然是MVC(Model、View、Controller)框架,那你就必须要记住pureMVC中的四个主要结构类:Proxy(相当于Model)Mediator(相当于View)Command(相当于Controller)Facade(管理Proxy、Mediator和Command的东西)     view本篇说的是Vi

AS3 游戏开发 1841

【软考高级架构设计师】——2025年上半年软考真题(回忆版)

a)异构计算和算法优化b)资源抽象和容器控制c)安全和隔离(大致是这个意思)

小志的博客 4827

11. TI MSPM0G3507 DMA传输实战:ADC数据自动搬运与电压采集

本文以TI MSPM0G3507为例,详细讲解了如何利用DMA(直接存储器访问)实现ADC数据的自动搬运与电压采集。通过实战演示,解放CPU资源,提升系统实时性与效率,适用于电赛备赛及嵌入式开发中的数据采集场景。

weixin_42465140的博客 131

时序SDC约束set_data_check及常见应用场景

时序约束SDC之set_data_check命令及常见应用场景解析

weixin_37584728的博客 2286

Flex中用RemoteObject与java后台通信

感谢:flex的RemoteObject的用法 BlazeDS是一个基于服务器的Java远程调用(remoting)和Web消息传递(messaging)技术,使得后台的Java应用程序和运行在浏览器上的Flex应用程序能够相互通信。 如果你想通过使用RPC Services提供一些企业级功能,如不同域之间数据交换的代理功能、客户端认证、服务器端日志、本地化支持、RPC Servi

小团团的专栏 1683

手推反向传播+numpy实现

反向传播的重要性不必多说,手推也是必备基础,大厂面试要求用numpy实现一下BP也是经常的事。下面以一个简单的两层网络为例(简单到连bias都没有的那种),真·手推反向传播+numpy实现。 说明: input:输入 net_h:隐层 S(x):sigmoid简写 SD(x):sigmoid导数的简写 out_h:隐层经过sigmoid激活的输出 net_o:输出层 out_o:经过经过sigmoid激活的输出层,也就是最后的输出 target(简写t1、t2):Ground...

xian0710830114的专栏 1238

【信息系统项目管理师】第18章:项目绩效域详解

(3)度量绩效域与规划绩效域、项目工作绩效域和交付绩效域的相互作用:1规划构成了 交付和规划比较的基础;项目绩效域共同构成了一个统一的整体,作为一个完整系统,在项目生命周期过程中运行,系统内的每个绩效域相互作用、相互关联和相互依赖,并协调一致、共同运作,支撑项目目标和价值 的实现。(5)开发方法和生命周期绩效域与其他绩效域的相互作用:开发方法和生命周期绩效域与干系人绩效域、规划绩效域、不确定性绩效域、交付绩效域、项目工作绩效域和团队绩效域相互作用。(2)项目工作绩效域的绩效要点包括:项目过程;

数据知道的博客 7803

PureMVC 游戏框架解析

作者:吴秦 出处:http://www.cnblogs.com/skynet/ 本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名吴秦(包含链接). 参考资料 [1]     PureMVC官方网站:www.puremvc.org [2]     Wikipedia:http://zh.wikipedia.org/zh-cn/MVC [

优秀技术文章收录 9187

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Flex Cairngorm详解

Cairngorm是一个开源的Flex项目,为FLex提供了一个类似MVC的体系结构框架,它是Flex RIA开发的最好框架之一。使用Cairngorm框架可以大大提高开发和维护的效率。   Cairngorm说白了就是一大堆的设计模式和功能模块,它分为6部分,分别是: Business(业务逻辑部分)。 Command(命令部分)。 Control(控制部分)。 M

xc889078的专栏 672

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

flex框架pureMVC的使用:第一步

<br /><br />   做flex做久做大了,使用一个框架便是自然而然的事情。这样程序才会更健壮,更易于扩展,更易于维护。pureMVC足够简单,核心也只有十来个类,是一个轻量级的Flex框架,只一天的时间,就可以学通,没有理由不用它的。<br /> <br />    麻雀虽小,五脏俱全,pureMVC,直译过来就是“纯MVC”,是一个MVC框架。官方的中文文档有44页,放在附件中,可以下载了看。推荐一个入门的文章给大家。(http://riachina.com/showtopic-11011.ht

ld_flex的专栏 1168

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Flex 记录点滴(一)关于Flex

Flex 记录点滴(一)关于Flex 参考文档《Developing Flex Applications》     当我第一次听说RIAs(Rich Internet Applications),当我第一次开始接触Flex,当我陆陆续续的从老外那里看到Flex可以做到什么的时候?作为一位Java开发员,我仿佛看到了一场即将爆发的革命,这是一场关于“呈现层”的革命,这场革命将要改变的

隐隐约约出现平常人诞生的故乡 1872

flex框架pureMVC的使用 第一步

                2008-07-06flex框架pureMVC的使用:第一步关键字: flex puremvc     做flex做久做大了,使用一个框架便是自然而然的事情。这样程序才会更健壮,更易于扩展...

qq_44919483的博客 171

flex框架pureMVC的使用

做flex做久做大了,使用一个框架便是自然而然的事情。这样程序才会更健壮,更易于扩展,更易于维护。pureMVC足够简单,核心也只有十来个类,是一个轻量级的Flex框架,只一天的时间,就可以学通,没有理由不用它的。       麻雀虽小,五脏俱全,pureMVC,直译过来就是“纯MVC”,是一个MVC框架。官方的中文文档有44页,放在附件中,可以下载了看。推荐一个入门的文章给大家。(h

zhouyi8510的专栏 767

Flex pureMVC 框架的使用

做flex做久做大了,使用一个框架便是自然而然的事情。这样程序才会更健壮,更易于扩展,更易于维护。pureMVC足够简单,核心也只有十来个类,是一个轻量级的Flex框架,只一天的时间,就可以学通,没有理由不用它的。     麻雀虽小,五脏俱全,pureMVC,直译过来就是“纯MVC”,是一个MVC框架。官方的中文文档有44页,放在附件中,可以下载了看。推荐一个入门的文章给大家。里面有足够全面

兰染 1373

Programming Flex2 - 二.通过Flex框架建立应用程序

创建项目一个Flex程序最少由一个文件或多达数以百计的文件组成。文件类型如下:MXML    这种文件主要包含程序的可视部分,即样式设计和UI组件。ActionScript类    这种文件是所有自定义组件,数据模型,客户端逻辑和服务器代理的源代码。XML    虽然XML通常来自对服务器的动态请求,但很多程序的配置参数仍利用静态的XML文件。图片    Flex程序可以嵌入也可以动态加载图片。声

hbb的专栏 1818

Flex流行MVC框架之Cairngorm小试牛刀

前几天学了下Flex的一MVC流行框架Cairngorm,并自己小试牛刀一把,暂作了一网站后台,通过项目让我现在觉得Cairngorm并不是一个如此神奇的东西,只要我们大家都能按照它走一遍就会有所收获,我们就会对MVC有个基本的了解,也会对Cairngorm有一个初步了解,希望大家通过我的这篇文章也能写出一个demo出来,当然是能在不看我这篇demo或者别人的demo的前提下写出来啦,呵呵,...

你假笨 264

FLEX : ObjectProxy & <fx:Model> tag

今天碰到了一个非常让我困扰的问题,使我觉得很有必要对Object的可绑定代理对象ObjectProxy做一个单独的说明;而,在编译时正是会被编译为ObjectProxy类型(The most common type of MXML-based model is the tag, which [b][color=red]is compiled into an ActionScript object...

Wuaner的博客 157
上一篇: Android采用Pull解析和生成xml文档
下一篇: Android ListView详解
lk231_java
博客等级 码龄15年 0粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值