2013-03-02 3 views
1

Есть ли способ отправить событие (Action Script 3.0) на какой-то класс, который каждый объект-ведьма находится в этом классе и имеет указанную функцию прослушивания, может поймать это событие? , Например, у меня есть структура как это:AS3 dispatchEvent на каждом объекте

редактировать (класс обновление):

class example extends EventDispatcher { 
object1 = {subObject1 = {anotherObject1, anotherObbject2}, subObject2} 
object2 = {subObject3} 
object3 

... 
} 

, и я хочу, чтобы некоторые из них слушателей событий:

anotherObject1.addEventListener(MyEvent.PART3D_CHANGED, function (e: MyEvent){/*do something*/); 
anotherObbject2.addEventListener(MyEvent.PART3D_CHANGED, function (e: MyEvent){/*do something*/); 
object3.addEventListener(MyEvent.PART3D_CHANGED, function (e: MyEvent){/*do something*/); 

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

this.dispatchEvent(new MyEvent(MyEvent.PART3D_CHANGED)) 

L ike Вы видите, мне нужно отправить одно событие типа, и мне не нужно делать это на каждом объекте.

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

+0

Я не понимаю, чего вы хотите. Вы хотите иметь объект, который может запускать события с регистрацией других, прислушиваясь к этому специальному событию? Или вы хотите создать собственный объект событий, который вы можете запустить? – philipp

+0

Я обновил свой вопрос. Мне нужно, чтобы мой пример класса отправил событие, и каждый объект, у которого есть слушатели, мог поймать, что событие – eldi

+0

, расширяющее EventDispatcher, делает трюк. var test = new example(); test.addEventListener (, ); и, наконец, test.dispatchEvent (новое событие ()); Вы можете создать свои собственные типы событий, создав класс, который расширяет Event. – philipp

ответ

0

Я не думаю, что есть стандартный способ для такого поведения в модели событий: http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html

Там в захвате фазы (который является обратным барботирования), но она по-прежнему имеет место для anscestors (только в другом порядке). События, вызывающие первичную мотивацию, заключались в том, чтобы поддерживать особый характер событий мыши, а не проходить общие события вокруг. Когда вы нажимаете что-то, вы одновременно нажимаете кнопку «И» одновременно (так что у обоих есть естественное право справиться с этим).

Могут ли ваши дети подписываться только на родительский класс? Например, это не редкость, чтобы сделать следующее, если объект заинтересован в глобальных движениях мыши:

stage.addEventListener(MouseEvent.MOUSE_MOVE, watchMouse); 

Аналогичен ваш anotherObject можно сделать:

myBigMainParent.addEventListener(MyEvent.MY_EVENT, anotherObjectLocalHandler); 

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

Смежные вопросы