2013-04-26 34 views
0

我的ActionScript項目中有2個類; Main和ContentManager。我希望將Main傳遞給ContentManager,因爲我想先實例化Main,然後將控件傳遞給ContentManager中的方法,之後控件應該返回到Main。將主類傳遞給另一個類 - 提供不可訪問的引用

我這樣做主要的構造函數中通過實例

contentManager = new ContentManager(this); 

裏面內容管理器的構造

public class ContentManager(_main:Main) { 
    this.main = _main; 
} 

後來

this.main.setData(data); 

在主,使用setData是

public function setData(data:Object):void 
{ 
    versionData = data; 
} 

我收到一個編譯器警告,我覺得很奇怪。 Flash Builder會在ContentManager中爲我自動完成setData,這表明它可以通過this.main看到它。我也可以在運行時訪問main中的變量,例如

main.somePublicVar = "foo"; 

但調用setData作爲方法給出了:

Attempted access of inaccessible method setData through a reference with static type Main. 

我已經嘗試過,因爲一對夫婦的其他電話:

main.toString(); 
main.addChild(null); 
main.setData(null); 

第2做工精細,第三,我一個,失敗,錯誤。完全失去。

乾杯

+0

我不是ActionScript專家,但是將'Main'類傳遞給其他類似乎是錯誤的方法。你不應該在'Main'中實例化你的'ContentManager'並調用它的公共方法,讓'Main'控制這個節目嗎?雙向依賴性通常表示某些事情是錯誤的。 – 2013-04-26 18:52:49

+0

他上面所說的,再加上:你的錯誤方法說你正在調用一個名爲'showSubMenu()'的方法,但是你不會向我們展示那個代碼。 – 2013-04-27 03:26:42

+0

我在Main中實例化ContentManager並調用它的方法。不過,我需要ContentManager來回調Main。我已經嘗試了自定義事件方法和調度/偵聽,但也沒有通過Main檢測到事件。 – PorridgeBear 2013-04-27 13:05:06

回答

0

按照net.uk.sweet,自定義事件+報導/聽工作。必須在內容管理器實例上進行偵聽,這是我之前的方法出錯的地方,以便將其添加到顯示列表中。我將自己的數據添加到自定義事件類中,以便通過listen回調函數訪問它。感謝大家。

0

我想你可能已經宣佈充當二傳手:

public function set setData(data:Object):void 
{ 
    versionData = data; 
} 

而且因爲你在呼喚它像main.setData(data)而不是main.setData = data你得到這個錯誤。

難道是這樣?!