Контроль событий в flex as3 (порядок событий) - PullRequest
1 голос
/ 29 июня 2010

У меня есть приложение flex, отображение этого приложения построено со многими контейнерами. У меня есть FlexEvent.UPDATE_COMPLETE на каждом из объектов displayObject.

Чего я хочу достичь? Я хочу обработать событие только на верхнем уровне, на котором оно произошло, например, если у меня есть сетка и обновление произошло в метке где-то внутри, я хочу обработать событие только в сетке.

есть ли способ сделать это?

просто чтобы подчеркнуть, у меня нет никаких знаний об экранных объектах во время компиляции, только во время выполнения, дисплей строится динамически, чтобы я не мог просто написать код в сетке, я должен как-то проверить если событие произошло на более высоком уровне.

Мне бы хотелось помочь с этой проблемой, даже если это не код, а концепция того, как решить эту уникальную проблему.

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 июня 2010

Просто проверьте event.target и игнорируйте, если это не то, что вы ищете.Или даже лучше: слушайте события на компонентах верхнего уровня и игнорируйте, если target и currentTarget не совпадают.

if(event.target != event.currentTarget) 
    return;

Если вы тоже не можете этого сделать, проверьте родителей: если родительваше приложение или контейнер, содержащий элементы верхнего уровня, это элемент верхнего уровня.В зависимости от структуры вашего компонента это может быть что-то вроде

if(event.target.parent == this)
//or
if(event.target.parent == this.theContainer_thatHolds_topLevelItems)
//or 
if(event.target.parent is Application)
//or 
if(event.target.parent is CustomContainerClassName)
0 голосов
/ 29 июня 2010

Рассматривали ли вы stopPropagation () / stopImmediatePropagation () для события после обработки этого события.

Пример. Поскольку ваша кнопка находится на холсте.Ваш метод обработчика событий в canvas будет выглядеть так:

function handleEvent(e:FlexEvent):void {
 trace("In Canvas's handler");
 //do your events...
 e.stopPropagation(); //This stops from propagating e to its parent containers, which is an HBOX. The container can be anything at runtime, it doesnt affect the propagation.

}

Попробуйте тот же пример и в других ваших контейнерах.

Некоторые примеры здесь,

http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html

http://livedocs.adobe.com/flex/3/langref/flash/events/Event.html#stopPropagation%28%29

...