2011-07-02 73 views
6

有人可以解釋AS3中getDefinitionByName和getDefinition之間有什麼區別嗎?AS3中getDefinitionByName和getDefinitionByName之間的區別

當我加載外部SWF時,我不能使用getDefinitionByName,因爲我得到了錯誤#1065。

但使用externalSWF_ContentLoaderInfo.applicationDomain.getDefinition工程確定。

那麼,爲什麼getDefinitionByName找不到className? 我的意思是,如果定義位於加載的SWF的applicationDomain中,爲什麼不在主SWF中呢? (我正在使用Flex)。

Offtopic:我無法創建新的標籤,所以我不能添加標籤getDefinition方法和getDefinitionByName :(

回答

6

getDefinition方法ApplicationDomain它返回一個類,命名空間或函數的定義的方法。

getDefinitionByNameflash.utils一個包級函數返回一個Class對象,你可以用它來實例化新對象。定義必須已經在你的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作爲加載器上下文的屬性。

+0

好吧,所以getDefinitionByName()是主應用中ApplicationDomain.currentDomain.getDefinition()的某種類型的快捷方式? – Enrique

+0

在當時你所在的ApplicationDomain中,是的。 – shanethehat

+0

什麼決定你在哪個應用程序域?它是包含調用getDefinition的方法(即調用堆棧頂部的方法)的類的應用程序域(AD)? – Triynko