首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

Flex中Module模块间通信有关问题

2012-11-10 
求助:Flex中Module模块间通信问题。??????? Application中加载导航栏作用的Module? header.swf,其中有一个

求助:Flex中Module模块间通信问题。

?

?

????? Application中加载导航栏作用的Module? header.swf,其中有一个方法switchBodyState(STATE_URL:String)方法,用来切换Body的状态,

?

?????? Application中同时加载Body 的Module? body.swf,body.swf当前默认状态时home,另外还有product、service、suggestion共四个状态。

?

?????? 在此要用到Flex Module间通信,问题是:Application如何取得header.swf中的方法获取参数,传给body.swf进行状态转换?

?

求助了!!!网上找了很多资源,基本都是导航栏直接放在Application中的,而不是通过加载获得的。

?

有一点思路,本人Flex新手,不清楚具体怎样实现:

?

header.swf ——》application ——》body.swf

?

?

?



当主应用程序可以访问被加载模块的数据时,moduleReadyHandler时间处理函数被调用。

<mx:ModuleLoader>的child属性类型重新映射为原模块类类型,现在你可以调用模块的公开方法访问其数据了。

而当使用ModuleManager 类为父应用程序时, 模块实例是通过IModuleInfo 的IFlexModuleFactory实例的create方法返回的:



这个模块提供一些控件供用户输入和提交用户信息。getter/setter 属性和getFullName方法将在模块的<mx:Script> 标签里实现。由实现IUserEntry 接口的mx.modules.Module 和mx.modules.ModuleBase类建立firstName和lastName的数据绑定。

要访问这里或其他实现IUserEntry接口的模块数据,父已运行必须对具体模块加载类的相应属性进行类型映射。

下面的例子使用<mx:ModuleLoader>的child属性实例访问实现IUserEntry模块的数据:


<mx:ModuleLoader>实例的ready事件处理函数建立对用户信息提交的事件处理器。当submitHandler方法被调用时,通过模块的getFullName实现打印一些字符串。把ModuleLoader实例的child属性类型映射为IUserEntry接口,是确保应用程序和模块之间的松耦合设计,这使得你可以动态的与实现统一接口的不同模块类交互。

父SWF访问模块数据没有限制,通过parentApplication属性模块也可以访问父应用程序数据:


当模块完成初始化后,creationHandler方法被调用,调用父应用程序getInformation方法返回的子节点组件信息。

模块的parentApplication属性继承自UIComponent超类,是一个Object类型。动态类Object是所有类的父类。因此你可以通过parentApplication实例访问数据而不用关心父类实现。也就是说模块也直接调用父应用程序的属性,不管其属性是否可用而引发的运行时异常。

一般来讲,模块是不应该访问父应用程序数据的,这是根据模块和父应用程序之间的松耦合设计原则决定的。为了减小这种联系,你可以把载入模块的应用程序映射为接口,就像上面的例子那样做。要确保不同的应用程序都能和同一个模块通信,强烈建议直接提供父应用程序数据给模块而不是通过动态 parentApplication属性.做到了这些你就能轻松地开发模块化应用程序了。

热点排行