你好,我有一个函数如下:
private function seatClickHandler(e:MouseEvent):void{
var check:Check = new Check();
if(e.target.contains(check)){
e.target.removeChild(seat);
}else{
e.target.addChild(check);
}
}
基本上我想检查 e.target 是否包含一个名为 check 的子项。如果确实如此,我希望 e.target 删除 child ,否则我想添加 child 。但是我尝试的方法似乎不起作用,尽管我认为这是可行的方法。有什么建议吗?
最佳答案
当您声明 Check 对象时,Actionscript 会为该特定对象创建一个引用代码。
因此,第一次运行您的代码时,您的Check
对象可以被赋予@c0ecc29
的引用。您的 if
语句检查 @c0ecc29
是否是 target
的子组件。它不会,所以引用 @c0ecc29
的 Check
对象被添加到 target
。
第二次调用 clickHandler
时,将创建一个 Check
对象的新实例,该实例将具有一个新 引用 ID。您的目标具有带有 @c0ecc29
引用的原始 Check 对象,因此它不会被删除。
实现此功能的正确方法取决于目标是什么(DataGrid、Group 等)。
编辑:
根据您的意见,我会尝试这样的事情。它检查 Check
对象是否是 target
的子对象,并在需要时添加它。然后当 Check
对象被点击时,它会切换它的可见性。
public var check:Check = new Check();
private function seatClickHandler(e:MouseEvent):void
{
if(!e.target.contains(check))
{
check.addEventListener(MouseEvent.CLICK, check_handleClick);
e.target.addChild(check);
}
}
protected function check_handleClick(event:MouseEvent):void
{
check.visible = !check.visible;
}
如果您实际上需要从 target
中删除 Check
对象而不是仅仅改变它的可见性,您可以试试这个:
public var check:Check = new Check();
private function seatClickHandler(e:MouseEvent):void
{
if(!e.target.contains(check))
{
e.target.addChild(check);
}
else
{
e.target.removeChild(check);
}
}
关于actionscript-3 - 检查 child 是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4597357/