2017-07-23 36 views
0

我有一個加載器swf充當主swf,負責加載和渲染外部swf。as3從子swf調用文檔類中的函數

在加載器swf的文檔類中,我有一個名爲test的函數。

public function test() { 
    ExternalInterface.call("console.log", "Test"); 
} 

我想從使用名爲StateManager的外部類加載的子swf中調用此函數。在加載器swf的文檔類中正在創建StateManager類的新實例,如下所示。

import com.xxxx.state.StateManager; 

public class Loader extends MovieClip { 

    private static var _instance:Loader; 
    public static function get instance() { return _instance; } 

    public var stateManager = new StateManager(); 

    // Other code has been ommited obviously. 

} 

然後在StateManager中調用一個函數,該函數呈現新的swf。

public function setActiveState(url) { 
    var request = new URLRequest(url); 
    var loader = new Loader(); 
    loader.load(request); 
    addChild(loader); 
} 

在子SWF的文檔類,我試圖用許多不同的方法,所有這些都毫無結果發生,並沒有被生產錯誤調用加載器SWF的測試功能(我已經證實,子SWF正在渲染)。我已經嘗試使用下面的代碼。

public class ChildSWF extends MovieClip { 

    public function ChildSWF() { 
     MovieClip(parent.parent).Loader.instance.test(); 
    } 

} 

除了

public class ChildSWF extends MovieClip { 

    public function ChildSWF() { 
     MovieClip(parent.parent.parent).Loader.instance.test(); 
    } 

} 

和許多其他代碼片段研究這個問題的時候,我都看見了。如果有人可以幫助,那將不勝感激。

+0

如果您指出了您的孩子swf的安全上下文將會很有幫助。它們是否從父SWF的相同文件夾加載? – BadFeelingAboutThis

回答

0

首先。從來沒有,絕對從來沒有命名您的類作爲已經存在的類。就像在後臺偶爾發生煙花爆炸一樣,歡迎將來的麻煩與巨大的霓虹燈歡迎展示。

然後。您的課程加載程序不是任何顯示對象的成員(也不是變量),只是無法以您嘗試的方式訪問。類不這樣工作。它們是ApplicationDomain的定義。你可能想找到並閱讀它:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/ApplicationDomain.html#getDefinition()

其餘的很簡單。

public var callBack:Function; 

public function setActiveState(url, handler) 
{ 
    callBack = handler; 

    var request = new URLRequest(url); 
    var loader = new Loader; 
    loader.load(request); 
    addChild(loader); 
} 

然後在加載的內容:

public class ChildSWF extends MovieClip 
{ 
    public function ChildSWF() 
    { 
     (parent.parent as Object).callBack(); 
    } 
} 

加載的內容將調用任何方法引用您將在回調變量;

+0

我試着在(StateManager)中使用(parent.parent作爲Object).test();來調用一個名爲「test」的公共函數,該setActiveState位於同一個類中。它沒有產生錯誤,也沒有將測試打印到控制檯。 –

+0

@KyleSmith診斷它。像** trace(parent.parent); **,** trace((parent.parent as Object).test()); **一步一步找出它所在的點**不是** 。 – Organis

相關問題