2009-11-07 111 views
0

我有2類,顯示保持當前選擇的組件訪問的對象的靜態變量的屬性:AS3 - 從另一個對象

public class Display 
{ 
    public static var selectedComponent:Component; 
} 

元器件具有ID串和selectedComponent變量設置上點擊:

public class Component extends MovieClip 
{ 
    public var id:String; 

    addEventListener(MouseEvent.CLICK, function() { 
     Display.selectedComponent = this; 
    }); 
} 

我現在希望能夠使用Display.selectedComponent.id =「測試」來設置ID;

我的問題是轉換錯誤:

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

卸下selectedComponent變量類型,所以它讀取公共靜態無功selectedComponent;消除了轉換錯誤,似乎改變了ID變量,但它似乎只是對象的副本。

有什麼建議嗎?

感謝

回答

1

在向selectedComponent分配「this」時,我認爲你的範圍是錯誤的。 本地函數定義中的「this」未指向組件類。

試試這樣說:

var scope:Component = this;  
addEventListener(MouseEvent.CLICK, function() { 
    Display.selectedComponent = scope; 
}); 

或像這樣:

import flash.events.Event; 
public class Component extends MovieClip 
{ 


    public var id:String; 

    public function Component() { 
     addEventListener(MouseEvent.CLICK, onClick); 
    } 

    private function onClick(e:Event) { 
     Display.selectedComponent = this; 
    } 
} 
+1

或可能是,你可以做 「Display.selectedComponent =組件(e.target);」我認爲這是更清潔的方法。 – bhups 2009-11-08 06:05:41

+0

不是我不同意,但爲什麼它會更清潔與e.target? (如何「昂貴」鑄造?) – Les 2009-11-08 12:32:06

0

如果你省略類型(public static var selectedComponent;)默認情況下將是Object類型。對象不會在分配時複製;他們只持有引用,所以不會做副本。

你的代碼看起來像它應該工作...

我知道這是沒有意義的,但也許鑄造this組件時分配可能會有所幫助:Display.selectedComponent = Component(this);你永遠不知道...