`

mxml往另外的mxml传值的问题

    博客分类:
  • flex
阅读更多
今天碰到一个关于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学习.
分享到:
评论

相关推荐

    flex与java远程传值demo

    Flex与Java远程传值是Web开发中的一个重要技术组合,它允许富互联网应用程序(RIA)如Flex客户端与服务器端的Java应用进行数据交换。本示例是一个综合性的项目,包括两个模块:一个基于Flex的前端应用和一个基于Java...

    Flex + LCDS + J2EE 传值交互实例

    1. Flex:Flex是一种基于ActionScript和MXML的开源框架,用于创建运行于Adobe Flash Player或Adobe AIR上的用户界面。它允许开发者构建具有丰富图形和交互性的前端应用。 2. LCDS:LiveCycle Data Services是Adobe...

    jsp与flex的整合直接拷贝就可以用

    它提供了一种强大的MXML和ActionScript语言来构建具有丰富图形界面的应用程序,这些应用程序可以在大多数现代浏览器中运行,无需插件。 **二、JSP与Flex整合的目的** JSP与Flex整合的主要目的是实现后端数据处理与...

    flex4做的itemrenderer呈现器

    要创建一个ItemRenderer,首先需要创建一个新的MXML文件,例如`friendItem.mxml`。在这个文件中,我们需要继承自`mx.controls.listClasses.ItemRenderer`或`spark.components.supportClasses.ListItemRenderer`...

    Flex itemRenderer的详细教程

    内嵌 ItemRenderer 是指直接在 MXML 文件中定义的 ItemRenderer。这种类型的 ItemRenderer 主要在简单的应用中使用,它能够快速地为列表中的每一项提供基本的样式和布局。 **示例代码:** ```xml ...

    flex osgi实现-potomac 实现页面与页面间数据传递和页面间各部分的数据传递

    在Flex中,我们通常使用ActionScript和MXML来构建用户界面和业务逻辑。然而,这些组件往往彼此独立,导致数据交换变得复杂。Potomac引入了OSGi的概念,使得Flex组件可以注册为服务,其他组件则可以通过服务查找机制...

    Flex中很多的帮助文档已经资料和一些常见问题的解决方案

    3. **跳转与传值**:在Flex应用中,导航通常是通过Navigator容器实现的,如Accordion或TabNavigator。传递值可以在组件间通过事件或使用Application级的SharedObjects来完成。此外,Flex也支持URLVariables进行HTTP...

    Flex与Java通过实体传递数据

    2. **在MXML中使用远程服务**:在Flex MXML文件中,可以创建一个服务实例,并调用其方法来发送数据到后端。 ```as [Bindable] private var userService:UserService = new UserService(); private function ...

    Flex 报表后期改正

    描述中的“jsp传值获取信息完善”意味着在JavaServer Pages(JSP)中,开发者可能在最初的设计阶段没有充分考虑到数据传递和接收的问题,导致在实际使用中存在信息传递不完整或错误的情况。JSP是Java的一种视图技术...

    flex4.5学习笔记

    - **皮肤文件**: `ApplicationContainerSkin.mxml`是一个皮肤文件示例。 - **结构**: 包含状态(`&lt;s:states&gt;`)定义、元数据(`&lt;fx:Metadata&gt;`)以及界面元素定义。 - **组件定义**: 通过`&lt;s:Group&gt;`、`&lt;s:Rect&gt;`等...

Global site tag (gtag.js) - Google Analytics