2011-06-05 58 views
0

我想加載一個模塊並將其添加到一個名爲「mod」的mx:box對象。在這裏我的代碼:Flex不能添加模塊作爲DisplayObject

var m:IModuleInfo = ModuleManager.getModule("modules/Module_Category.swf"); 
m.addEventListener(ModuleEvent.READY, function(e:Event):void 
{ 
    this.mod.addChild(m.factory.create() as DisplayObject); 
}); 
m.load(); 

的問題是,當我嘗試添加它使用addChild Flex的告訴我,國防部在使用addChild

TypeError: Error #1010: A statement is not defined and has no propeties.

行是什麼意思?

+0

這是一個編譯時錯誤或運行時錯誤?什麼是「this.mod」?它沒有在您的代碼示例中定義。 – JeffryHouser 2011-06-05 01:56:10

+0

realy編碼器,只查找代碼:D像我上面說的那樣,「mod」就是一個簡單的mx:box對象。它是一個運行時錯誤。編譯器對它很好。 – masi 2011-06-05 09:54:39

+0

順便說一句,我認爲使用而不是會解決它,但我使用flex 4.1框架似乎沒有(看起來像它的一部分4.5),所以我有使用舊的mx組件。 – masi 2011-06-05 09:56:41

回答

3

您的'此'範圍不正確。你在匿名函數中使用'this'。在這個函數內部,'this'是指函數本身,而不是你可能瞄準的類。我無法看到你的課程的其餘部分,但我可以看到'這個'範圍沒有'mod'屬性,因此你的代碼將會在那裏失敗。這就是爲什麼你得到'未定義'的錯誤:'this.mod'不存在。

我可以看到3級的解決方案(這取決於你的代碼的其餘部分的模樣,但其中一人應滿足您的需要):

  1. 只是刪除「這一點。」。然後您的類成員'mod'將被正確引用。
  2. 將該匿名函數轉換爲類級函數。 '這個'然後將指向那個類,而不是函數。
  3. 在匿名函數之外爲「this」創建一個別名。

一些代碼會解釋說,最後一個更好:

var myClass:MyClass = this; 
m.addEventListener(ModuleEvent.READY, function(e:Event):void 
{ 
    myClass.mod.addChild(m.factory.create() as DisplayObject); 
}); 
+0

謝謝m8,我fogot我使用anon。功能......難怪爲什麼它不工作。 – masi 2011-06-05 16:39:31

+0

在範圍問題上的好答案,但不會使用最後一個問題。如果你打算這樣做,不妨創建一個類功能。此外,我很好奇爲什麼masi不只是使用ModuleLoader。 – 2011-06-06 13:46:56

+0

@J_A_X我偶爾使用第三個選項,如果我需要訪問類成員和局部變量。我會同意這不是很好的做法。 – RIAstar 2011-06-06 17:53:51