![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Добрый день.
У меня есть приложение с кучей вложенных элементов, при клике на любой из них. я хочу получить все его паренты, т.е. при клике на элемент, эвент (по идее) проходит через все эти компоненты и до мэйн класса. Это мне нужно для того чтобы проверить если элемент является чайлдом какого-то определённого компонента public class MainClass{ ... private function init() { addEventListener(MouseEvent.CLICK, checkClick); } private function checkClick(e:MouseEvent) { // при этом e.target != объект MainClass // как-то из e достать список всех парентов e.target? if( ОдинИзПарентовМоегоЭлемента as НужныйМнеКласс) { ..... } } } |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Да да, так и сделал
![]() |
|
|||||
|
Цитата:
2. Проверку, является ли объект чьим-то чайлдом можно сделать через getChildIndex
__________________
interplanety |
|
|||||
|
Цитата:
Цитата:
__________________
:) |
|
|||||
|
Согласен. Но автор привел конкретный пример с мышкой, если только для мышки - сработает.
Так пробегать цепочку по парентам все равно придется. А если не бегать - можно использовать contains.
__________________
interplanety |
|
|||||
|
Цитата:
__________________
:) |
|
|||||
|
Да, индекс наверное здесь действительно не стоит использовать, а contains делает как раз то, о чем писал тс. Возвращает true если объект является чайлдом от вызывающего.
Из хелпа адоба: var sprite1:Sprite = new Sprite(); var sprite2:Sprite = new Sprite(); var sprite3:Sprite = new Sprite(); var sprite4:Sprite = new Sprite(); sprite1.addChild(sprite2); sprite2.addChild(sprite3); trace(sprite1.contains(sprite1)); // true trace(sprite1.contains(sprite2)); // true trace(sprite1.contains(sprite3)); // true trace(sprite1.contains(sprite4)); // false
__________________
interplanety |
|
|||||
|
Цитата:
Если под требуемый объект нет резона создавать отдельный МойКласс или заставлять реализовывать МойИнтерфейс есть более гибкий способ: (ну действительно, нужно только узнать тот ли это объект, не плодить же классы/интерфейсы ради этого) - создаем константу, где удобнее - вешаем на требуемый объект пустой слушатель (можно вообще любую функцию - она не будет вызываться, можно вообще одну на весь проект создать в отдельном файле "fakeListener.as") myObject.addEventListener(MY_OBJECT, fakeListener); ... function fakeListener(event:Event):void {} while(true) { if (obj.hasEventListener(MY_OBJECT)) { canvasTrace('BUBBLED from MODULE'); break; } if ( obj == this) { canvasTrace('NO IMODULE PARENT!'); break; } obj = obj.parent; } Можно проверить, является ли объект ребёнком какого-нибудь "myObject" |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:20. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|