PDA

Просмотр полной версии : Как детям отследить что их родителя удалили со сцены?


__i
20.03.2007, 15:05
Есть компонет (любой например наследник от UIComponent). Он лежит в контейнер 1, контейнер 1 в контейнере 2 и т.д. Как этому компоненту, отследить, что какой то из эти контейнеров был удален со сцены (т.е. и компонент тоже спрятан)?

Как бы не очень хотелось пользоваться извратом с обхождение парентов вверх до самого.

etc
20.03.2007, 15:22
А Event.REMOVED только вверх всплывает?

__i
20.03.2007, 15:31
типа того (, детишки его просто не деспатчат. Насколько я понимаю (не смотрел в коде). это событие срабатывает того для компонета который именно ремувили, но не распостраняеться на иерархию его детей (

etc
20.03.2007, 15:38
Не проверял, но есть мысль подписать детей цепочкой (т.е. родитель-ребенок, а ребенок передает дальше своим потомкам) на кастомный ивент. Типа:

private function removedHandler(event:Event):void {
if (event.target==this) { // Удалили нас
var evt:CustomEvent = new CustomEvent(CustomEvent.REMOVED);
dispatchEvent(evt);
}
}

__i
20.03.2007, 16:07
Не проверял, но есть мысль подписать детей цепочкой (т.е. родитель-ребенок, а ребенок передает дальше своим потомкам) на кастомный ивент. Типа:

private function removedHandler(event:Event):void {
if (event.target==this) { // Удалили нас
var evt:CustomEvent = new CustomEvent(CustomEvent.REMOVED);
dispatchEvent(evt);
}
}
не так не катит, т.к. мы не можем изменить контейнеры - это стандартные компоненты, а вот тот самый "интересующийся" ребенок это уже свой компонент. Скорей всего таки придется обходить всех родителей и подвписыватся на листенеров, а это уродство т.к. нужно переопределить кучу методов дабы при всех ремувах и аддах и прочем чистить/заполнять эти листенеры.

etc
20.03.2007, 16:14
А почему бы тебе не создать статический класс-вещатель, который подпишется на Event.REMOVED самого-самого родителя всех и вся (ведь ивент к нему всплывет 100%) и при получении ивента разошлет всем твоим кастомным компонентам?

Nirth
20.03.2007, 16:26
Etc дело говорит, подпиши СистемМенеджер к ремувд и смотри таргет евента

__i
20.03.2007, 19:53
Ребята вы меня не поняли нифига не поняли (. Попробую описать мою конкретную ситуацию.
Есть у меня есть класс который экстендит ТексИнпут, он занимаеться тем что следит за введенными данными и если там количесво символов достигла определенного числа, то нужно показать тултип с сообщением. Станджартный тултип не канает. Так вот это сообщение находиться на сцене несколько секунд, и в эти несколько секунд это текстовое поле может просто исчезнуть(например юзер кликнул на другой таб), но оно должно "почистить" за собой тултип, если он есть.
Живет это класс также как и текст инпут типа засунул в МХМЛ или в Ас Код и есть счастье. И естетсвенно отлавливать все 148 этих инпутов и их родителей где-то в другом месте как не в самом инпуте неспортивно. Типа "Вася, вот тебе мега класс который все делает за тебя, но тебе нужно мегаизвратиться тут и тут, чтобы все работало хорошо" не катит (

Nirth
20.03.2007, 22:43
почему бы не сделать нестандартный тултип? там же можно переопределить класс тултипы а с помощью mx.core.Singleton вроде можно расширить менеджер

для тултип есть полный спекрт событий и не надо будет гемороится

__i
20.03.2007, 23:35
Ну если уходим от тул типа ? показать какой-то UIComponent? или просто нужно отписатся от событий?