我有一个加载器swf作为主swf,负责加载和渲染外部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 :(得分:0)
首先。从来没有,绝对从不将您的课程命名为已有的课程。你喜欢用巨大的霓虹灯WELCOME显示器来欢迎未来的麻烦,偶尔会有烟花爆炸。
然后。您的类 Loader 不是任何显示对象的成员(也不是变量),并且无法以您尝试的方式进行访问。类不是这样的。它们是 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();
}
}
加载的内容将调用 callBack 变量中的任何方法引用;