2010-07-01 97 views
4

我有一個主要的應用程序(app.swf)加載一個模塊(profiles.swf)和配置文件模塊加載另一個模塊(member_profile.swf)。在member_profile中,我從返回Member類型的對象的服務器端獲取成員數據。返回的對象包含一個名爲Jobs的數組,其中包含保存類型爲MemberJob的對象。在member_profile模塊中,有一個函數使用類型爲MemberJob的參數來顯示作業詳細信息。我有一個循環,通過數組變回來,並呼籲像這樣每個數組項功能:類型強制失敗同一類

for(i = 0; i < member.Jobs.length; i++) 
    addJob(member.Jobs[i]); 

我得到的addJob行錯誤:

類型強制失敗:不能轉換組件。 classes :: MemberJob @ 19107d81到components.classes.MemberJob。

而且我總是在第二次加載member_profile模塊時收到此錯誤。我的意思是這個模塊被加載,當我點擊配置文件模塊中的成員的名字時,它通過這個名字作爲子模塊的參數來加載該成員的配置文件,包括他的作業。因此,如果我選擇查看成員「X」的配置文件,則配置文件無任何錯誤地加載,但是如果我然後單擊成員「Y」(這導致子模塊用新參數重新加載),那麼我得到類型強制錯誤。如果我先點擊「Y」然後點擊「X」,則會發生同樣的情況,第二次加載時出錯。

任何人都可以幫助我嗎?

+0

你可以張貼addJob函數的代碼..也許這個問題是存在的 – Treby 2010-07-01 01:26:19

+0

我假設Flash會在每次加載SWF時爲'components.classes.MemberJob'註冊一個新的定義。第二個定義雖然在內容上與第一個定義完全相同,但被視爲與默認定義不同的類型,因此也是錯誤。這是一個錯誤,或者您在使用Flex模塊時缺少一些編譯參數以忽略重複的定義。我沒有使用Flex模塊,因此這只是一個假設。 – Amarghosh 2010-07-01 06:05:17

+0

我不認爲問題是在addJob方法中,因爲除了將作業對象的值分配給顯示組件外,它什麼也不做,它看起來像這樣: public function addJob(mj:MemberJob):void {\t \t \t \t jobTitle.text = mj.JobTitle; jobDescription.text = mj.JobDescription; jobLocation.text = mj.JobLocation; //依此類推 } – Yasmine 2010-07-01 13:33:38

回答

9

重新閱讀關於Module Domains的Flex幫助部分,並確保您已將components.classes::MemberJob類導入到正確的域中。

編輯:

嘗試把你的主應用程序文件的地方下面,看看它是否有差別:

import components.classes.MemberJob; 
private var memberJob:MemberJob; 
+0

我不指定任何應用程序域時加載那麼如何確保將MemberJob類導入到正確的域中? 「模塊域」部分的第一行顯示「默認情況下,模塊已加載到當前應用程序域的子域」,因此,我沒有指定應用程序域,這意味着模塊被加載到當前應用程序的子域中,對嗎?只有一個模塊使用這個類,所以我明白當它被加載時它擁有MemberJob的類定義。我弄錯了所有這一切? – Yasmine 2010-07-04 10:27:38

+0

我放置了小鬼ort聲明和主應用程序中的變量聲明,它確實有所作爲。現在沒有錯誤。 但我不明白髮生了什麼? 有沒有其他解決這個問題的方法,而不是在主應用程序中創建這個未使用的變量。主應用程序不需要任何東西的MemberJob類。 謝謝。 – Yasmine 2010-07-04 14:00:49

+0

請你解釋一下這個解決方案是如何解決這個問題的? 這是否意味着,每當我有這個問題,我應該把主要應用程序中的導入語句和虛擬變量? 謝謝 – Yasmine 2010-07-05 07:51:20

相關問題