一般我们生成的swf有3种,一种是Flex mxml主应用编译得到,第2种类是用Flex SDK编译as类得到,还有一个就是fla在Flash CS3内运行生成。

因为第3种的调用方法同第2种,这里就说明前2种swf在Flex项目内的应用。

HelloWorld1.mxm



  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3. layout="absolute" >
  4. <mx:Script>
  5. <!--[CDATA[
  6. public function sayHello():void{
  7. trace("HelloWorld from mxml");
  8. }
  9. ]]-->
  10. </mx:Script>
  11. </mx:Application>

<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" > <mx:Script> <!--[CDATA[ public function sayHello():void{ trace("HelloWorld from mxml"); } ]]--> </mx:Script> </mx:Application>

HelloWorld2.as



  1. package {  
  2.     public   class  HellowWorld2{  
  3.         public   function  sayHello(): void {  
  4.             trace("HelloWorld from AS" );  
  5.         }  
  6.     }  
  7. }

app.mxml


  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2. < mx:Application   xmlns:mx = "http://www.adobe.com/2006/mxml"    layout = "absolute"   >   
  3.     < mx:Script >   
  4.         <!--[CDATA[  
  5.             public function CompleteHandler1(evt:Event):void{  
  6.                 Object(evt.target.content.application).sayHello();   //区别         
  7.             }  
  8.             public function CompleteHandler1(evt:Event):void{  
  9.                 Object(evt.target.content).sayHello();         //区别
  10.             }  
  11.         ]]-->   
  12.     </ mx:Script >   
  13.     < SWFLoader   id = "hw1"   source = "HelloWorld1.swf"   complete = "CompleteHandler1(event)" />   
  14.     < SWFLoader   id = "hw2"   source = "HelloWorld2.swf"   complete = "CompleteHandler2(event)" />   
  15. </ mx:Application >   

<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" > <mx:Script> <!--[CDATA[ public function CompleteHandler1(evt:Event):void{ Object(evt.target.content.application).sayHello(); } public function CompleteHandler1(evt:Event):void{ Object(evt.target.content).sayHello(); } ]]--> </mx:Script> <SWFLoader id="hw1" source="HelloWorld1.swf" complete="CompleteHandler1(event)"/> <SWFLoader id="hw2" source="HelloWorld2.swf" complete="CompleteHandler2(event)"/> </mx:Application>

HelloWorld1.mxml和HelloWorld2.as分别用Flex SDK编译成swf,然后在app.mxml内调试。

可以看出第一种情况生成的swf因为是通过mxml生成的,e.target.content其实是一个SystemManager类对象,必须要 通过它的application才能访问swf内部方法,而用as类直接生成的swf通过e.target.content就能直接访问。