Flex与Flexswf如何实现通讯

Flex与Flex swf如何实现通讯,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的青山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

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文件:

viewplaincopytoclipboardprint?   

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

viewplaincopytoclipboardprint?  publicfunctioninvokeByOutsideFlex():void{  trace("Success...");  }  publicfunctioninvokeByOutsideFlex():void{  trace("Success...");  }

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中加入:

viewplaincopytoclipboardprint?  publicfunctioninvokeByInsideFlex swf():void{  trace("Igetit...");  }  publicfunctioninvokeByInsideFlex swf():void{  trace("Igetit...");  }

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

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

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

◆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。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


当前标题:Flex与Flexswf如何实现通讯
网址分享:http://hbruida.cn/article/jidhso.html