2011-10-28 45 views
0

MXML文件的功能我有一個基本的mxml應用程序,它看起來像這樣調用在從外部

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="800" height="600"> 
<mx:Script> 
    <![CDATA[ 


     public function init():void{ 

     } 

此SWF被加載到用裝載機另一個SWF並用的addChild(裝載機)加入;

然後我需要從父SWF調用init函數。我怎樣才能做到這一點? 只是打電話

loader.content.init(); 

失敗。

另一個問題是,這個mxml文件的確切類名是什麼?

謝謝!

+0

你說,調用方法失敗。我們怎麼知道,爲什麼會失敗?爲我們提供用於加載swf的錯誤文本和代碼。 –

+0

確切的錯誤是:ReferenceError:錯誤#1069:在_Main_mx_managers_SystemManager上找不到屬性init() ,並且沒有默認值。 – clamp

回答

4

我會建議使用接口而不是直接引用應用程序mxml的類。

  1. 定義一個接口:

    package behaviors { 
        interface Initialiazable 
        { 
         function init():void; 
        } 
    } 
    
  2. 實現在應用程序MXML接口:

    <?xml version="1.0" encoding="utf-8"?> 
    <mx:Application implements="behaviors.Initialiazable" 
        width="800" height="600" 
        xmlns:mx="http://www.adobe.com/2006/mxml"> 
        <mx:Script> 
         <![CDATA[ 
         public function init():void{ 
          trace("Application.init()"); 
         } 
    
  3. 加載其它應用程序裏面的SWF應該是這樣的:

    <?xml version="1.0" encoding="utf-8"?> 
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> 
        <mx:Script> 
        <![CDATA[ 
    
        import mx.events.FlexEvent; 
        import mx.managers.SystemManager; 
    
        import behaviors.Initializable; 
    
        private var loadedApp:Initializable; 
    
        protected function handleSWFLoaderComplete(e:Event):void 
        { 
         // wait for the Flex application to load 
         var loadedAppSystemManager:SystemManager = e.target.content as SystemManager; 
         loadedAppSystemManager.addEventListener(FlexEvent.APPLICATION_COMPLETE, handleApplicationComplete); 
        } 
    
        protected function handleApplicationComplete(e:FlexEvent):void 
        { 
         // cast the loaded application to the Interface 
         loadedApp = (Initializable) e.currentTarget.application; 
         loadedApp.init(); 
        } 
        ]]> 
        </mx:Script> 
    
        <mx:SWFLoader source="LoadedApp.swf" complete="handleSWFLoaderComplete(event)"/> 
    
    </mx:Application> 
    
+0

感謝,但不幸的是,這失敗與錯誤:TypeError:錯誤#1034:類型強制失敗:無法將_Main_mx_managers_SystemManager @ 113720a1轉換爲com.IInit。 – clamp