Flex Load其他SWF
- 05月 25th, 2008
-
从途径上将,SWF文件有3种。1,Flash生成的。2,Flex MXML 生成的。3,Flex AS生成的。
对于比较大型的项目,一般会采取将各个模块分为多个SWF,使用时调用的方法。
这里先不提及域的问题。
对于Flash或者是Flex AS生成的SWF文件,被Load以后,content中的对象,是我们预期定义的类。但Flex MXML生成的SWF文件,被Load以后,content中的对象,是systemmanager,我们在mxml的<application>标签中定义的所有内容,被保存在systemmanager.application中。
下面的例子可以证明这个问题,并且说明了如何调用加载的各种SWF中的属性与方法。
FlashChild.as //生成Flash SWF
package { import flash.display.Sprite; public class FlashChild extends Sprite { public function FlashChild() { } public var str:String = 'This is the Flash SWF'; } }AsChild.as //生成Flex AS SWF
package { import flash.display.Sprite; public class AsChild extends Sprite { public function AsChild() { } public function show():String{ return str; } private var str:String = 'www.czbin.com'; } }Child.mxml //生成Flex MXML SWF
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.controls.Alert; public function show():void{ Alert.show("Thanks"); } public var str:String = 'www.czbin.com' ]]> </mx:Script> <mx:Label text=”Welcom to” id=”mx_label”/> </mx:Application>Parent.mxml //调用上面3个SWF的主文件
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init();initAs();initFlash()"> <mx:Script> <![CDATA[ import mx.core.UIComponent; import mx.controls.Alert; private var childApp:Object; private var AsChild:Object; private var FlashChild:Object; public function init():void{ var url:String = 'Child.swf'; var request:URLRequest = new URLRequest(url); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandle); loader.load(request); } public function initAs():void{ var url:String = 'AsChild.swf'; var request:URLRequest = new URLRequest(url); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,AsCompleteHandle); loader.load(request); } public function initFlash():void{ var url:String = 'FlashChild.swf'; var request:URLRequest = new URLRequest(url); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,FlashCompleteHandle); loader.load(request); } private function completeHandle(e:Event):void{ var UI:UIComponent = new UIComponent(); UI.addChild(e.target.content); addChild(UI); childApp = e.target.content; } private function AsCompleteHandle(e:Event):void{ AsChild = e.target.content; } private function FlashCompleteHandle(e:Event):void{ FlashChild = e.target.content; } private function showChildVar():void{ Alert.show(childApp.application.mx_label.text+" "+childApp.application.str) } private function showChildFun():void{ childApp.application.show(); } private function showAsSWF():void{ Alert.show(AsChild.show()); } private function showFlashSWF():void{ Alert.show(FlashChild.str); } ]]> </mx:Script> <mx:Button label=”Show Welcome” click=”showChildVar()”/> <mx:Button label=”Show Thanks” click=”showChildFun()”/> <mx:Button label=”Show AsSWF” click=”showAsSWF()”/> <mx:Button label=”Show FlashSWF” click=”showFlashSWF()”/> </mx:Application>把上面生成的前3个SWF拷贝到下面工程的BIN目录中。