Определите, существует ли ребенок - PullRequest
0 голосов
/ 19 марта 2012

У меня есть программа, управляемая событиями.Мне нужно иметь возможность вызывать removeChild() тогда и только тогда, когда объект является дочерним.getChildByName() и большинство других функций, похоже, не допускают этого, и если вы вызовете removeChild() для объекта, который не является дочерним, он выдаст ошибку.Я полагаю, что вариант может заключаться в том, чтобы перехватить сгенерированную ошибку и просто проигнорировать ее, но это кажется плохим решением.

Любая помощь приветствуется!

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Чтобы избежать ошибок, я обычно просто обертываю removeChild() в if(parent):

if(sprite.parent)
    sprite.parent.removeChild(sprite);

Если у спрайта нет родителя, ноль будет дан в if() значении removeChild()не будет вызван.

removeChild() также запускается из parent дочернего элемента (что мы уже подтвердили, что существует в операторе if() вокруг него).Это означает, что целевой родитель всегда является владельцем дочернего элемента.


parent часто забывают, но это чрезвычайно мощное свойство для упрощения всех операций, связанных с DisplayList.

2 голосов
/ 19 марта 2012

Допустим, у вас есть obj и его предполагаемый родитель p, и вы хотите удалить obj из p, если и только если obj на самом деле является потомком p.

if (obj.parent == p)
    p.removeChild(obj);

Это правильный способ сделать это.

Если p может быть null, то:

if (p && obj.parent == p)
    p.removeChild(obj);

Если obj само по себе может быть null, то:

if (obj && p && obj.parent == p)
    p.removeChild(obj);
...