2009-05-20 136 views
3

我剛剛嘗試彎曲,最近碰到了一個絆腳石鑄件。Flex 3.2鑄造問題

這是我正在運行的代碼。

/** 
* return background definition depending on time 
*/ 
private function findBackgroundItem(relativeTime : Number) : CSBackgroundItem 
{ 
    if(this.backgroundItems == null) return null; 
    var result :CSBackgroundItem = null; 
    var relative:Date = new Date(relativeTime); 
    for(var i : Number = 0; i < this.backgroundItems.length; i++) 
    { 
     // backgroundItems is an Ilist of CSBackgroundItem. 
     var colourItem : CSBackgroundItem = CSBackgroundItem(this.backgroundItems.getItemAt(i)); 

     // other stuff here 
    }   
    return result; 
} 

問題當IList.getItemsAt()結果轉換到CSBackgroundItem可變colourItem發生。如果我使用'as'關鍵字,我得到的colourItem投結果是空以下錯誤拋出

TypeError: Error #1034: Type Coercion failed: cannot convert com.mystuff::[email protected] to com.mystuff.CSBackgroundItem. 

。使用調試器顯示該列表不是空的,並確實填充了CSBackgroundItem對象。

現在這是古怪的位..這段代碼工作,它第一次加載模塊..後續加載(卸載後)拋出異常。

任何人都可以闡明爲什麼會發生這種情況?

+0

使用ObjectUtil.copy()與'as'關鍵字具有相同的結果,'colourItem'對象保留爲空而不是異常。 – Scrimmers 2009-05-20 07:58:11

回答

1

FYI,一個加載到一個孩子ApplicationDomain的類型可以被轉換爲一個類型(它擴展/實現)在父ApplicationDomain中。

例如,

loader.applicationDomain = ApplicationDomain.currentDomain; // parent domain 
loader.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); // child domain 
loader.applicationDomain = new ApplicationDomain(); // new domain 
+0

很酷,在這種情況下,沒有擴展的繼承,但很好知道 – Scrimmers 2009-05-20 11:02:38

1

我想我可能已經找到了答案..

我的猜測是模塊加載在不同的ApplicationDomain ..這將意味着你不能在當前域來自同一類型轉換..

據我所知,這隱約地類似於加載相同類的不同Java ClassLoaders。

一旦我證實,它

1

是啊..這工作我會後再次..

這裏是我的MXML樣式中使用的修復..

<mx:ModuleLoader id="loader" x="10" y="10" width="100%" height="100%" applicationDomain="{ApplicationDomain.currentDomain}"/> 

的equivilant動作將

loader.applicationDomain = ApplicationDomain.currentDomain;