Flex与Flex swf如何实现通讯

开发 后端
本文向大家简单介绍一下Flex swf的用法,这里讲述的是在FlexApplication中嵌套一个Flex swf,然后实现Flex与Flex swf相互间的通讯。

本文和大家重点讨论一下Flex通讯系列---Flex与Flex swf,要实现Flex与Flex swf相互间的通讯,我们需要引入SystemManager接口实现。

Flex通讯系列---Flex与Flex swf

这里讲述的是在FlexApplication中嵌套一个Flex swf,然后实现Flex与Flex swf相互间的通讯。我们需要引入SystemManager接口实现。

下面我们来看一下《Flex3参考手册》对SystemManager的描述,你大约就知道怎么回事,使用里面现成的属性和方法就可以实现Flex与Flex swf的通讯啦。

每个应用程序都包含一个SystemManager。如果应用程序窗口的大小发生更改(您无法在应用程序中更改其大小,只能通过与操作系统窗口或浏览器交互来进行更改),则SystemManager会发送一个事件。它是应用程序中所有可显示项目(例如mx.core.Application主实例以及所有弹出窗口、工具提示、光标等)的父项。任何以SystemManager作为父项的对象都将被视为“***”窗口,就连工具提示和光标也是如此。

是的,要实现Flex调用嵌套Flex swf,主要我们在Flex swf中为Flex打开方便之门就可以了,也就是设计一个publicfunction,难道这还不够简易?下面说一下简单的实现:

1、在FlexApplication(如命名为Main.mxml)中通过Flex swfLoader标签加载Flex swf文件:

 

  1. viewplaincopytoclipboardprint?  
  2. <mx:Flex swfLoaderid="Flex swfLoader"source="Game01.Flex swf"/> 
  3. <mx:Flex swfLoaderid="Flex swfLoader"source="Game01.Flex swf"/> 
  4.  

 2、在Game01.mxml中设计一个publicfunction。如:

  1. viewplaincopytoclipboardprint?  
  2. publicfunctioninvokeByOutsideFlex():void{  
  3. trace("Success...");  
  4. }  
  5. publicfunctioninvokeByOutsideFlex():void{  
  6. trace("Success...");  
  7. }  
  8.  

 3、在Main.mxml中调用:

viewplaincopytoclipboardprint?
Object(Object(Flex swfLoader.content).application).invokeByOutsideFlex();
//其实第二个Object具体是SystemManager对象,所以也可以写作
Object(SystemManager(Flex swfLoader.content).application).invokeByOutsideFlex();
Object(Object(Flex swfLoader.content).application).invokeByOutsideFlex();
//其实第二个Object具体是SystemManager对象,所以也可以写作
Object(SystemManager(Flex swfLoader.content).application).invokeByOutsideFlex();
我们先来了解两个内容,一个事Flex swfLoader的content属性,另一个是Application.application。

◆Flex swfLoader-content

content属性

content:DisplayObject[]
此属性包含表示在Flex swfLoader控件中加载的内容的对象。

Application-application

很明显,通过这样简单的两句话就可以获取到FlexApplication层次下的public方法。

好了,至此已经可以实现了Flex向Flex swf通讯了。那么Flex swf怎么可以反过来跟FLEX说话呢?原理是一样的,Flex开放一些function,然后Flex swf就可以直接调用那些function了。

4、如在Main.mxml中加入:

  1. viewplaincopytoclipboardprint?  
  2. publicfunctioninvokeByInsideFlex swf():void{  
  3. trace("Igetit...");  
  4. }  
  5. publicfunctioninvokeByInsideFlex swf():void{  
  6. trace("Igetit...");  
  7. }  
  8.  

 5、回去Game01.mxml可以直接通过如下代码调用:

  1. viewplaincopytoclipboardprint?  
  2. Object(SystemManager(this.parent.parent.root).application).invokeByInsideFlex swf();  
  3. //SystemManager可以改成Object,多态特性  
  4. Object(SystemManager(this.parent.parent.root).application).invokeByInsideFlex swf();  
  5. //SystemManager可以改成Object,多态特性  
  6.  

 接下来我们需要看一下两个属性:

◆UIComponent:

这个层次我是通过Debug对象层层查找出来的,层次不同当然需要改一下了,甚至可以直接跳到几层,直接到最外层,这个自己再去查查,呵呵。

源代码下载:准备上传

parent属性

parent:DisplayObjectContainer[]
此组件的父容器或组件。只有UIComponent对象应该具有父属性。非UIComponent对象应该使用其它属性引用其所属对象。一般而言,非UIComponent对象使用owner属性引用其所属对象。

◆DisplayObject:

root属性

root:DisplayObject[]
对于加载的Flex swf文件中的显示对象,root属性是此Flex swf文件所表示的显示列表树结构部分中的***显示对象。对于代表已加载图像文件的位图对象,root属性就是位图对象本身。对于***个加载的Flex swf文件的主类的实例,root属性就是显示对象本身。Stage对象的root属性是Stage对象本身。对于任何未添加到显示列表的显示对象,root属性设置为null,除非它已添加到符合以下条件的显示对象容器:不在显示列表中,但属于已加载Flex swf文件中***显示对象的子级。

application属性

application:Object[]
对***应用程序的引用。
通常,Application对象可能存在层次结构,因为Application可以使用Flex swfLoader控件动态加载其它Application。可通过UIComponent的parentApplication属性访问UIComponent所在的子Application,并可以在层次结构中向上浏览到***Application。
 

【编辑推荐】

  1. Flex里如何加载Flex swf文件
  2. Flex必须了解的那些事
  3. 在Flex中使用样式的五大方法
  4. FlexBuilder3.0与Eclipse3.4的***结合
  5. Flex ComboBox和Datagrid组件用法指导

 

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-27 13:46:18

Flex swf

2010-08-12 13:34:13

Flex验证组件

2010-07-30 12:56:02

Flex调用JavaS

2010-08-10 09:40:23

Flex与浏览器交互

2010-08-09 15:30:00

Flex字体

2010-07-29 15:09:19

Flex全屏

2010-08-05 15:06:19

Flex数据绑定

2010-08-05 13:27:06

Flex布局

2009-07-03 08:58:22

Flex教程Flex程序

2010-08-12 12:55:02

FlexFlash

2010-08-09 10:39:14

FlexACtionSCrip

2010-08-10 17:01:48

FlexJavaScript

2010-07-27 10:54:22

Flex

2010-08-09 13:37:09

FlexDjango

2010-07-28 15:29:18

Flex函数

2010-08-10 16:30:05

Flex上传文件

2010-07-29 14:27:52

FlexWeb

2010-08-06 09:24:44

FlexFlash

2009-06-19 16:25:34

Flex与Spring

2010-08-03 14:24:37

Flex与java集成
点赞
收藏

51CTO技术栈公众号