【问题标题】:Difference between getDefinition and getDefinitionByName in AS3AS3 中 getDefinition 和 getDefinitionByName 的区别
【发布时间】:2011-07-02 20:29:50
【问题描述】:

有人能解释一下 getDefinitionByName 和 getDefinition inA AS3 有什么区别吗?

当我加载外部 SWF 时,我无法使用 getDefinitionByName,因为我收到错误 #1065。

但是使用externalSWF_ContentLoaderInfo.applicationDomain.getDefinition 可以。

那么,为什么 getDefinitionByName 找不到类名? 我的意思是,如果定义在加载的 SWF 的 applicationDomain 中,为什么不在主 SWF 中呢? (我正在使用 Flex)。

Offtopic:我无法创建新标签,因此无法添加标签 getDefinition 和 getDefinitionByName :(

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    getDefinitionApplicationDomain 的一个方法,它返回类、命名空间或函数的定义。

    getDefinitionByName 是来自flash.utils 的包级函数,它返回一个可用于实例化新对象的类对象。该定义必须已加载到您的 ApplicationDomain 中的某个位置。

    无法使用外部 SWF 生成 getDefinitionByName 的原因是它被加载到单独的 ApplicationDomain 中。您的第二个示例有效,因为您的目标是正确的 ApplicationDomain。要使您的第一个示例正常工作,您必须将外部 SWF 加载到您当前的 ApplicationDomain 中,如下所示:

    var request:URLRequest = new URLRequest("externalSWF.swf");
    var context:LoaderContext = new LoaderContext();
    context.applicationDomain = ApplicationDomain.currentDomain;
    var loader:Loader = new Loader();
    loader.load(request,context);
    

    之所以有效,是因为它将当前 ApplicationDomain 作为加载器上下文的属性传递。

    【讨论】:

    • 好的,那么 getDefinitionByName() 是主应用程序中 ApplicationDomain.currentDomain.getDefinition() 的某种快捷方式?
    • 在您当时所在的任何 ApplicationDomain 中,是的。
    • 是什么决定了您所在的应用程序域?是否是包含调用 getDefinition 的方法的类的应用程序域 (AD)(即调用堆栈顶部的方法)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多