Как наистина работи flash dispatchEvent?

Това се казва в документи, че dispatchEvent на EventDispatcher "...изпраща събитие в потока на събитията". Фразата е хубава и всъщност не обяснява нищо.

Да кажем, че имаме два слушателя, чакащи събитие "A" на обект "a", така че какво поведение трябва да очакваме при повикване:

a.dispatchEvent("A")?

Ще бъдат ли извикани и двата слушателя незабавно, преди връщане от distpatchEvent? Или ще бъдат наредени в опашка на някой вътрешен флаш плейър и ще бъдат обработени с влизане в следващия кадър? Можем ли да разчитаме на някакво дефинирано поведение на flash player тук или поведението е недефинирано? Как трябва да се чете „изпраща събитие към поток от събития“? Въпросът е важен, тъй като на практика засяга контролния поток на кода.


person lithuak    schedule 13.02.2011    source източник


Отговори (2)


Просто използвайте Signals вместо това :P

https://github.com/robertpenner/as3-signals/wiki

Не, но наистина, те са много лесни за използване и разбиране, чудесно допълнение към кутията с инструменти AS3.

Можете също така да научите много за това как работят родните AS3 събития, като прочетете критиките на Rob Penner (превъртете надолу до края на wiki страницата)

person ruedaminute    schedule 13.02.2011

Всичко зависи от йерархията на вашия списък за показване.

Структурата на събитията на Flash се основава на неговия модел на вътрешно събитие.

  1. Сцената ще бъде първият уведомен обект и след това събитието ще се процеди надолу по списъка за показване, докато достигне целта си. Тази фаза се нарича фаза на улавяне. За да го активирате, задайте useCapture на true на слушател на събития. Имайте предвид, че е безсмислено да го правите, освен ако слушащият обект не е родител на обекта, насочен към събитието. Това се нарича прихващане на събития.

  2. Следващата фаза е целевата фаза. Това е най-често познатото поведение при събития. Целевият дисплейен обект (този, който има слушател за събитието) ще получи събитието и ще изпълни кода в слушателя.

  3. Последната фаза се нарича фаза на мехурчета. Това е, когато събитието се появи в списъка за показване след като събитието е получено. Изхвърлянето на събития е много важно за изпращане на персонализирани събития, тъй като ще трябва да знаете как да слушате за събития, изпратени от деца на обект.

Когато изпращам събитие, обикновено използвам този синтаксис (Event.CHANGE е само често срещан пример):

Object.dispatchEvent(new Event("CHANGE", true, false));

Object е обектът, от който изпращате. Първият параметър е събитието, което изпращате. Вторият е параметърът bubbles. Последният е свойството cancelable. Event.cancelable се използва за предотвратяване на действието по подразбиране на събитие (IE: щракване с мишката) чрез Event.preventDefault().

Справка:

person Community    schedule 13.02.2011