Flex ModuleLoader向Module(模块)传接参数实例
Flex ModuleLoader向Module(模块)传递参数实例
参考: http://www.myflexhero.com/share/flex-hero-flex4/flex-hero-components/flex-module/278
开发中我们一般会用到Module,有时候我们在调用该Module后需要向其传递参数。传递参数的方式很多,比如使用事件的方式。
这里我使用ModuleLoader提供的特征进行传递参数使用示例。代码写的还算简单,我相信你能看明白。
关于在模块中获取url中的参数,请参见Flex loaderInfo swf模块获取url传递的参数一文。
(你可以点击这里(Click here to see the effect in new window)新开窗口查看效果,点击这里(View Source)查看源码):
[点击按钮后请稍候片刻,经测试需要一定时间下载该模块,且界面没有提示(因为我没有添加加载提示,加载提示效果请查看Flex ModuleLoader和ModuleManager的区别、ModuleManager加载模块实例一文)。]
主文件源码
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
viewSourceURL="srcview/index.html">
<fx:Script>
<![CDATA[
import com.myflexhero.MyFlexHeroTest;
import mx.events.ModuleEvent;
import mx.modules.ModuleLoader;
protected function clickEvent(event:Event):void
{
var general:ModuleLoader = new ModuleLoader();
general.url="com/myflexhero/MyFlexHeroTest.swf";
general.addEventListener(ModuleEvent.READY,readyModule);
addElement(general);
}
private function readyModule(event:ModuleEvent):void{
var ml:ModuleLoader=event.target as ModuleLoader;
//这里的MyFlexHeroTest则是MyFlexHeroTest.swf对应的mxml类
//如果你选择下载源码,我测试时写的是Share.swf。
var ichild:MyFlexHeroTest = ml.child as MyFlexHeroTest;
if(ichild){
ichild.loginName = "MyFlexHero,Welcome!";
}
}
]]>
</fx:Script>
<s:Button label="点击传入" click="clickEvent(event)"/>
</s:Application>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
viewSourceURL="srcview/index.html">
<fx:Script>
<![CDATA[
import com.myflexhero.MyFlexHeroTest;
import mx.events.ModuleEvent;
import mx.modules.ModuleLoader;
protected function clickEvent(event:Event):void
{
var general:ModuleLoader = new ModuleLoader();
general.url="com/myflexhero/MyFlexHeroTest.swf";
general.addEventListener(ModuleEvent.READY,readyModule);
addElement(general);
}
private function readyModule(event:ModuleEvent):void{
var ml:ModuleLoader=event.target as ModuleLoader;
//这里的MyFlexHeroTest则是MyFlexHeroTest.swf对应的mxml类
//如果你选择下载源码,我测试时写的是Share.swf。
var ichild:MyFlexHeroTest = ml.child as MyFlexHeroTest;
if(ichild){
ichild.loginName = "MyFlexHero,Welcome!";
}
}
]]>
</fx:Script>
<s:Button label="点击传入" click="clickEvent(event)"/>
</s:Application>
副文件 MyFlexHeroTest源码
<?xml version="1.0" encoding="utf-8"?> <mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="400" height="300" creationComplete="module1_creationCompleteHandler(event)"> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.events.FlexEvent; public var loginName:String; protected function module1_creationCompleteHandler(event:FlexEvent):void { Alert.show("传入的参数:"+loginName); } ]]> </fx:Script> </mx:Module>