2009-11-07 133 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);你永远不知道...

相关问题