- 浏览: 783396 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 1223【改变输出swf的尺度,背景颜色或帧频】 在"Na ... -
Flex正则表达式规则
2012-05-31 15:35 17121.Flex正则表达式规则 1.1普通字符 字母、数字、汉 ... -
Flex中[Bindable]的使用心得
2012-05-30 16:55 920在Flex编程中,Bindble使用到最多的元数据。该标签可以 ... -
FLEX元标签_Bindable
2012-05-30 16:46 11071 概述 [Bindable ... -
Flex Bindable
2012-05-30 16:41 828对一个类声明绑定,相当于给这个类里的所有属性都声明了绑定。等同 ... -
Flex [Bindable] 以及使用方法
2012-05-30 16:37 1131绑定: 举个例子: 给下面的public变量加上[Bind ... -
关于flex开发自定义组件需要注意的问题
2012-05-23 14:24 1153一.首先回答,为什么要 ... -
Flex中自定义组件
2012-05-23 14:17 1114如要重写组件,就不得不了解Flex中组件初始化过程。初始化过程 ... -
flex,datagrid多列排序
2012-03-21 15:01 1079<?xml version="1.0" ... -
flex,datagrid 按照列来排序
2012-03-21 13:56 2139排序部分 import mx.controls.DateFie ... -
flex 动态给控件赋值,通过反射遍历MXML中的组件
2012-03-21 13:52 1373flex 动态给控件赋值,通过反射遍历MXML中的组件。当有1 ... -
flex双击不生效问题
2012-03-21 13:50 962今天用到flex的doubleclick的事件,但是不生效,原 ... -
FLEX datagrid 点击列头排序后,行编辑问题
2012-03-21 13:45 1001点击列头排序后。行编辑事件结束后,adobe默认会自己重新将d ... -
flex内存管理机制
2012-03-20 13:44 938一.简述Flex内存释放优 ... -
Flex 内存处理的方法
2012-03-20 11:25 8771.当任何对象unload后,fl ... -
Flex3 Profile的使用
2012-03-13 15:38 955flex的profile就是一个性能监测器,也是adobe向传 ... -
FLEX内存释放优化原则
2012-03-13 15:36 821FLEX内存释放优化原则: 1. 被删除对象在外部的所有引 ... -
flashplayer的缓存目录
2012-03-13 15:34 3062flashplayer的缓存目录是: XP系统下是C:/Do ... -
swf 更新后,客户端不需要清空缓存即可查看最新版本
2012-03-13 14:20 2390我们在用Flex开发应用的时候,每次修改了swf,上传到服务器 ... -
用RSL来为你的flex程序减肥
2012-03-13 14:19 1173用RSL来为你的flex程序减肥 问题:一个只有几个控件的 ...
相关推荐
Flex与Java远程传值是Web开发中的一个重要技术组合,它允许富互联网应用程序(RIA)如Flex客户端与服务器端的Java应用进行数据交换。本示例是一个综合性的项目,包括两个模块:一个基于Flex的前端应用和一个基于Java...
1. Flex:Flex是一种基于ActionScript和MXML的开源框架,用于创建运行于Adobe Flash Player或Adobe AIR上的用户界面。它允许开发者构建具有丰富图形和交互性的前端应用。 2. LCDS:LiveCycle Data Services是Adobe...
它提供了一种强大的MXML和ActionScript语言来构建具有丰富图形界面的应用程序,这些应用程序可以在大多数现代浏览器中运行,无需插件。 **二、JSP与Flex整合的目的** JSP与Flex整合的主要目的是实现后端数据处理与...
要创建一个ItemRenderer,首先需要创建一个新的MXML文件,例如`friendItem.mxml`。在这个文件中,我们需要继承自`mx.controls.listClasses.ItemRenderer`或`spark.components.supportClasses.ListItemRenderer`...
内嵌 ItemRenderer 是指直接在 MXML 文件中定义的 ItemRenderer。这种类型的 ItemRenderer 主要在简单的应用中使用,它能够快速地为列表中的每一项提供基本的样式和布局。 **示例代码:** ```xml ...
在Flex中,我们通常使用ActionScript和MXML来构建用户界面和业务逻辑。然而,这些组件往往彼此独立,导致数据交换变得复杂。Potomac引入了OSGi的概念,使得Flex组件可以注册为服务,其他组件则可以通过服务查找机制...
3. **跳转与传值**:在Flex应用中,导航通常是通过Navigator容器实现的,如Accordion或TabNavigator。传递值可以在组件间通过事件或使用Application级的SharedObjects来完成。此外,Flex也支持URLVariables进行HTTP...
2. **在MXML中使用远程服务**:在Flex MXML文件中,可以创建一个服务实例,并调用其方法来发送数据到后端。 ```as [Bindable] private var userService:UserService = new UserService(); private function ...
描述中的“jsp传值获取信息完善”意味着在JavaServer Pages(JSP)中,开发者可能在最初的设计阶段没有充分考虑到数据传递和接收的问题,导致在实际使用中存在信息传递不完整或错误的情况。JSP是Java的一种视图技术...
- **皮肤文件**: `ApplicationContainerSkin.mxml`是一个皮肤文件示例。 - **结构**: 包含状态(`<s:states>`)定义、元数据(`<fx:Metadata>`)以及界面元素定义。 - **组件定义**: 通过`<s:Group>`、`<s:Rect>`等...