2011-04-28 59 views
0

我的應用程序當前包含一些由小組件管理器管理的小組件。當用戶點擊一個窗口小部件(如輔助部件),小插件管理器加載插件與下面的代碼行單獨同級應用領域:強制轉換加載到其他應用程序域中的對象時的強制轉換錯誤

wgtInfo.load(null, null, null, moduleFactory); //wgtInfo = IModuleInfo 

但是,我無法使用Widget的變量並在稍後發揮作用。我嘗試從窗口小部件管理器的窗口小部件列表中找到Helper窗口小部件,並且成功完成。但是,當我嘗試種姓從類型IBaseWidget的助手小工具(該接口的所有部件份額)鍵入HelperWidget,我收到以下錯誤:

TypeError: Error #1034: Type Coercion failed.....

這是因爲類的應用領域嘗試使用該助手小部件與Helper Widget的應用程序域不同。我試圖通過加載所有部件到同一個應用程序域中加載程序來解決這個:

wgtInfo.load(ApplicationDomain.currentDomain, null, null, moduleFactory); 

我現在碰到下面的錯誤,每當我嘗試加載助手插件:

TypeError: Error #1009: Cannot access a property or method of a null object reference.

我怎樣才能將我的Helper小部件加載到可由其他小部件訪問的公共應用程序域中?

+0

我在這裏有點困惑。但是,猜測是錯誤不是基於ApplicationDomain,而是基於哪些類正在編譯到哪個Module中。 Flex會自動優化SWF中未使用的類;但是你可以用include-libraries編譯器參數強制它們。 – JeffryHouser 2011-04-28 18:16:38

回答

0

在嘗試了許多解決方案失敗後(包括此頁面上的其他響應)後,我訴諸另一個事件驅動的解決方案。

我結束了調度自定義事件當輔助部件已經完成裝載,通知我的其他部件:

(HelperWidget.mxml)

ViewerContainer.addEventListener(AppEvent.WIDGET_OPEN_TAB, widgetOpenTabHandler); //listen for other widgets to open a tab within the Helper Widget 
ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_READY_OPEN_TAB)); //notify other widgets that loading is complete 

我的其他部件偵聽此事件,火災,並在完成後,派發另一個事件(AppEvent.WIDGET_OPEN_TAB)在Helper小部件中執行一個函數。

1

我相信你的問題來自不包含在swf中的類。這是因爲如果不用於減小文件大小,Flash不會在swf中的類中進行編譯。爲了防止出現這種情況,您只需要在該類中創建一個帶有幫助類的變量,如下所示:

private var helper:HelperWidget; 

看看是否有幫助。

+0

我打算採用相同的方法(請參閱我對原始問題的評論),但我沒有創建未使用的變量,而是建議使用include-libraries編譯器參數。 – JeffryHouser 2011-04-28 18:18:12

+0

@ www.Flextras.com,是的,這也是有效的,但如果你有很多東西,那麼維護它就太麻煩了。 – 2011-04-28 18:19:06

+0

我不知道爲什麼編譯器參數方法比'僞變量'方法難以維護。 – JeffryHouser 2011-04-28 19:10:53

1

我要重新發布我的'評論'作爲一個真正的答案。我猜這個錯誤不是基於ApplicationDomain,而是基於你正在被編譯到你的模塊中的哪些類。當Flex編譯SWF時,它會自動優化SWF中未使用的類。你可以迫使他們返回到SWF中的兩種方法之一:

  1. 使用編譯器參數include-libraries強制Flex編譯器類添加到您的SWF。
  2. 在您的應用程序中添加一個虛假變量,以便Flex編譯器認爲它已被使用並將其添加到最終的SWF中。像這樣的東西。

    private var myFakeObject:HelperWidth;

相關問題