- 浏览: 763410 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (573)
- Java基础 (76)
- C++基础 (5)
- hibernate (5)
- struts (4)
- spring (1)
- webservice (7)
- AjaX基础 (0)
- JS脚本 (53)
- 正则表达式 (5)
- html脚本 (30)
- 数据库基础 (54)
- 工作相关 (49)
- 其他 (30)
- Linux (9)
- web服务器 (17)
- JSP (13)
- eclipse (6)
- 面试题相关 (20)
- XML (3)
- Apache common (2)
- 生活 (35)
- VMware (1)
- log4j (9)
- BeanUtils (2)
- 设计模式 (3)
- UML (1)
- UNIX (1)
- ibats (5)
- GT-Grid (17)
- ABAP学习 (17)
- ABAP (35)
- ABAP--ALV (11)
- ABAP--WEBDIMPRO (0)
- abap-sample (1)
- BEMS (2)
- flex (33)
- GIS技术 (3)
最新评论
今天碰到一个关于mxml往另外的mxml传值的问题。原本需要实现的是,通过在A.mxml的一个button来控制B.mxml上的一个图形组件的全部展开/全部收缩功能的。
例子如下:A.mxml
<mx:ApplicationControlBar xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" alpha="0.74" cornerRadius="0" visible="true" dock="true" fontSize="12" height="31">
<mx:Button label="全部展开" fontSize="12" fontFamily="MSYH" click="onCollapseClick(event)" height="22"/>
<mx:Button id="btnExpand" label="全部收缩" fontSize="12" fontFamily="MSYH" click="onExpandClick(event)" />
<mx:Script>
<![CDATA[
[Bindable]
private var appModel : AppModelLocator = AppModelLocator.getInstance();
private function onExpandClick(e:MouseEvent):void
{
appModel.GraphExpand=true;
appModel.GraphCollapse=false;
dispatchEvent(new Event("GraphExpand",true,false));
}
private function onCollapseClick(e:MouseEvent):void
{
appModel.GraphExpand=false;
appModel.GraphCollapse=true;
dispatchEvent(new Event("GraphCollapse",true,false));
}
]]>
</mx:Script>
</mx:ApplicationControlBar>
B.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initial();" right="0" bottom="3" top="3" horizontalAlign="left" verticalAlign="bottom" fontFamily="MSYH" fontSize="16" fontWeight="bold" left="213" borderColor="#6D8AB5" width="100%" height="100%" headerHeight="25" xmlns:ns1="org.un.cava.birdeye.ravis.graphLayout.visual.*" xmlns:ns2="syec.topo.view.ApplicationControlBar.*" >
<mx:Script>
<![CDATA[
[Bindable]
private var model:AppModelLocator = AppModelLocator.getInstance();
private function initial():void{
this.addEventListener("GraphExpand",GraphExpand);
this.addEventListener("GraphCollapse",GraphCollapse);
BindingUtils.bindProperty(this,"GraphExpand",model,"GraphExpand");
BindingUtils.bindProperty(this," GraphCollapse",model,"GraphCollapse");
}
public function GraphExpand(b:Boolean):void{
vgraph.ExpandAll();
}
public function GraphCollapse(b:Boolean):void{
vgraph.CollapseAll();
}
]]>
</mx:Script>
<ns1:VisualGraph Expand="{model.GraphExpand}" Collapse="{model.GraphCollapse}" id="vgraph">
</ns1:VisualGraph>
</mx:Panel>
可以看到,在上面的代码中,采取了两种方案,橙色的方案一,办法很简单,直接在A.mxml里面派发一个事件,另外在B.mxml里面去捕捉这个事件,并且写下对应的处理方法即可。
蓝色的方案2,是我在项目里面的处理办法,新增一个的AppModelLocator类,代码如下:
package Model{
[Bindable]
public class AppModelLocator {
public var GraphExpand:Boolean;
public var GraphCollapse:Boolean;
public static var appModel:AppModelLocator;
public function AppModelLocator():void{
if(appModel !=null){
throw new Error( "Only one ModelLocator instance should be instantiated" );
}
}
public static function getInstance():AppModelLocator{
if(appModel==null){
appModel=new AppModelLocator();
}
return appModel;
}
}
}
,由于vgraph控件里面的Expand和Clooapse方法和AppModelLocator类里面的Expand和Collapse属性绑定在一起了,所以当Expand和Collapse发生变化时,vgraph控件会重新实现Expand和Clooapse方法。
方案1和方案2的优缺点正好互补。方案一简单、方便。缺点是在大项目中,在MXML反复进行派发、捕获事件可能让你的代码变得耦合性非常严重。方案2利用了MVC的思想,把所有的数据存储在M中(AppModelLocator),利用单例模式,对mxml需要显示的数据进行了绑定,做到了页面和逻辑分离。如果对这样的设计模式感兴趣,请参阅Cairngorm学习.
例子如下:A.mxml
<mx:ApplicationControlBar xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" alpha="0.74" cornerRadius="0" visible="true" dock="true" fontSize="12" height="31">
<mx:Button label="全部展开" fontSize="12" fontFamily="MSYH" click="onCollapseClick(event)" height="22"/>
<mx:Button id="btnExpand" label="全部收缩" fontSize="12" fontFamily="MSYH" click="onExpandClick(event)" />
<mx:Script>
<![CDATA[
[Bindable]
private var appModel : AppModelLocator = AppModelLocator.getInstance();
private function onExpandClick(e:MouseEvent):void
{
appModel.GraphExpand=true;
appModel.GraphCollapse=false;
dispatchEvent(new Event("GraphExpand",true,false));
}
private function onCollapseClick(e:MouseEvent):void
{
appModel.GraphExpand=false;
appModel.GraphCollapse=true;
dispatchEvent(new Event("GraphCollapse",true,false));
}
]]>
</mx:Script>
</mx:ApplicationControlBar>
B.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initial();" right="0" bottom="3" top="3" horizontalAlign="left" verticalAlign="bottom" fontFamily="MSYH" fontSize="16" fontWeight="bold" left="213" borderColor="#6D8AB5" width="100%" height="100%" headerHeight="25" xmlns:ns1="org.un.cava.birdeye.ravis.graphLayout.visual.*" xmlns:ns2="syec.topo.view.ApplicationControlBar.*" >
<mx:Script>
<![CDATA[
[Bindable]
private var model:AppModelLocator = AppModelLocator.getInstance();
private function initial():void{
this.addEventListener("GraphExpand",GraphExpand);
this.addEventListener("GraphCollapse",GraphCollapse);
BindingUtils.bindProperty(this,"GraphExpand",model,"GraphExpand");
BindingUtils.bindProperty(this," GraphCollapse",model,"GraphCollapse");
}
public function GraphExpand(b:Boolean):void{
vgraph.ExpandAll();
}
public function GraphCollapse(b:Boolean):void{
vgraph.CollapseAll();
}
]]>
</mx:Script>
<ns1:VisualGraph Expand="{model.GraphExpand}" Collapse="{model.GraphCollapse}" id="vgraph">
</ns1:VisualGraph>
</mx:Panel>
可以看到,在上面的代码中,采取了两种方案,橙色的方案一,办法很简单,直接在A.mxml里面派发一个事件,另外在B.mxml里面去捕捉这个事件,并且写下对应的处理方法即可。
蓝色的方案2,是我在项目里面的处理办法,新增一个的AppModelLocator类,代码如下:
package Model{
[Bindable]
public class AppModelLocator {
public var GraphExpand:Boolean;
public var GraphCollapse:Boolean;
public static var appModel:AppModelLocator;
public function AppModelLocator():void{
if(appModel !=null){
throw new Error( "Only one ModelLocator instance should be instantiated" );
}
}
public static function getInstance():AppModelLocator{
if(appModel==null){
appModel=new AppModelLocator();
}
return appModel;
}
}
}
,由于vgraph控件里面的Expand和Clooapse方法和AppModelLocator类里面的Expand和Collapse属性绑定在一起了,所以当Expand和Collapse发生变化时,vgraph控件会重新实现Expand和Clooapse方法。
方案1和方案2的优缺点正好互补。方案一简单、方便。缺点是在大项目中,在MXML反复进行派发、捕获事件可能让你的代码变得耦合性非常严重。方案2利用了MVC的思想,把所有的数据存储在M中(AppModelLocator),利用单例模式,对mxml需要显示的数据进行了绑定,做到了页面和逻辑分离。如果对这样的设计模式感兴趣,请参阅Cairngorm学习.
发表评论
-
Flex 非常实用的资料
2012-05-31 15:38 1188【改变输出swf的尺度,背景颜色或帧频】 在"Na ... -
Flex正则表达式规则
2012-05-31 15:35 16671.Flex正则表达式规则 1.1普通字符 字母、数字、汉 ... -
Flex中[Bindable]的使用心得
2012-05-30 16:55 895在Flex编程中,Bindble使用到最多的元数据。该标签可以 ... -
FLEX元标签_Bindable
2012-05-30 16:46 10581 概述 [Bindable ... -
Flex Bindable
2012-05-30 16:41 805对一个类声明绑定,相当于给这个类里的所有属性都声明了绑定。等同 ... -
Flex [Bindable] 以及使用方法
2012-05-30 16:37 1101绑定: 举个例子: 给下面的public变量加上[Bind ... -
关于flex开发自定义组件需要注意的问题
2012-05-23 14:24 1120一.首先回答,为什么要 ... -
Flex中自定义组件
2012-05-23 14:17 1086如要重写组件,就不得不了解Flex中组件初始化过程。初始化过程 ... -
flex,datagrid多列排序
2012-03-21 15:01 1050<?xml version="1.0" ... -
flex,datagrid 按照列来排序
2012-03-21 13:56 2110排序部分 import mx.controls.DateFie ... -
flex 动态给控件赋值,通过反射遍历MXML中的组件
2012-03-21 13:52 1315flex 动态给控件赋值,通过反射遍历MXML中的组件。当有1 ... -
flex双击不生效问题
2012-03-21 13:50 908今天用到flex的doubleclick的事件,但是不生效,原 ... -
FLEX datagrid 点击列头排序后,行编辑问题
2012-03-21 13:45 952点击列头排序后。行编辑事件结束后,adobe默认会自己重新将d ... -
flex内存管理机制
2012-03-20 13:44 921一.简述Flex内存释放优 ... -
Flex 内存处理的方法
2012-03-20 11:25 8281.当任何对象unload后,fl ... -
Flex3 Profile的使用
2012-03-13 15:38 928flex的profile就是一个性能监测器,也是adobe向传 ... -
FLEX内存释放优化原则
2012-03-13 15:36 796FLEX内存释放优化原则: 1. 被删除对象在外部的所有引 ... -
flashplayer的缓存目录
2012-03-13 15:34 3027flashplayer的缓存目录是: XP系统下是C:/Do ... -
swf 更新后,客户端不需要清空缓存即可查看最新版本
2012-03-13 14:20 2341我们在用Flex开发应用的时候,每次修改了swf,上传到服务器 ... -
用RSL来为你的flex程序减肥
2012-03-13 14:19 1121用RSL来为你的flex程序减肥 问题:一个只有几个控件的 ...
相关推荐
如果你的flex插件出现mxml无法打开的问题,请下载此文件,同时参考:http://www.tekool.net/blog/2008/06/28/flex-builder-3-plugin-dont-work-with-eclipse-34/或者:...
MXML语法.MXML flexview actionscript
mxml 源码
flex使用容器和MXML样式.pdf格式的 英文的哦
mxml-2.12.tar.gz
xml、mxml总结。xml是可扩展标记语言,标准通用标记语言的子集。此处总结基于w3cSchool上关于xml所属api进行总结。
mxml 适合用于嵌入式 xml 解析的轻量级的工具,在下载包的 mipsel 有编译好的.a 文件
pdf格式的flex的mxml语法,适合想学习flex的新手
minixml2.5最新的版本。 嵌入式xml 解析、查找、生成、遍历 功能,全部实现是标准c,移植很容易。 最新的2.5,修改了很多bug。 这个压缩包,里下载完了,直接就可以在liunx下编译安装。 如果是在windows下的话,只需要...
mxml 解析器, vc6.0平台, 在一些需求不大的场合可以使用!
mxml开源项目
一个上课用的ppt文档,更容易让你对mxml更为的了解。。
flex入门教程,主要介绍了mxml和ActionScript的简单应用,适合初学者,高手就没必要下载啦
Demo
ActionScript 3.0 语言和组件参考概述、MXML入门、FLEX入门帮助。
Mini-XML是一个小型的开源的XML解析器,采用 C 语言开发。该解析器最大的特点就是小型、无须依赖其他类库,只需要 GCC 编译器 和 make 程序即可编译,支持 UTF-8/UTF-16 编码。
About MXML programming files and Flex usage.
实现了计算器的加减乘除开根号和幂操作。没有去实现AS和MXML分离。 想研究的同学下载吧。。将文件解压后导入到FB 3.0 中
mxml-2.5,非常小巧好用的xml组织与解析的库的源代码。是msxml的绝佳替代品,不依赖任何其他库,操作也非常方便。
非常好用的XML解析库mxml-2.2.1.tar.gz