Когда вы объявляете свой объект Check, Actionscript создает код ссылки для этого конкретного объекта.
Таким образом, при первом запуске кода вашему объекту Check
может быть присвоена ссылка @c0ecc29
. Ваш оператор if
проверяет, является ли @c0ecc29
дочерним компонентом target
. Этого не будет, поэтому объект Check
со ссылкой @c0ecc29
добавляется к target
.
Во второй раз, когда вызывается clickHandler
, создается новый экземпляр объекта Check
, который будет иметь новый идентификатор ссылки. У вашей цели есть исходный объект Check со ссылкой @c0ecc29
, поэтому он не будет удален.
Правильный способ получить эту работу зависит от того, какая цель (DataGrid, Group и т. Д.).
EDIT:
Исходя из ваших комментариев, я бы попробовал что-то подобное. Он проверяет, является ли объект 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;
}
Если вам нужно фактически удалить объект Check
из target
вместо того, чтобы просто изменить его видимость, вы можете попробовать это:
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);
}
}