Используйте event.hasListener
функция для определения, имеет ли конкретное событие прослушивателей. event.hasListener
принимает массив исходных объектов событий и имя события как входные параметры. Он возвращает массив логических значений, указывающих, существуют ли прослушиватели для заданного события на каждом объекте массива.
Примечание
При вызове, event.hasListener
должно иметь NotifyAccess
для мероприятия. То есть звоните event.hasListener
в контексте, в котором можно вызвать notify
для рассматриваемого события.
Использовать event.hasListener
чтобы избежать отправки уведомлений о событиях, когда нет прослушивателей для события. Например, если создание пользовательских данных о событиях потребляет значительные ресурсы, или если события запускаются неоднократно, используйте event.hasListener
для тестирования прослушивателей перед выполнением этих шагов.
Обусловить создание данных о событиях и вызова notify
использование event.hasListener
. Для объектного массива a
, определите, есть ли прослушиватели перед созданием данных о событиях и запуском события:
if any(event.hasListener(a,'NameOfEvent
')) evt = MyCustomEventData(...); notify(a,'NameOfEvent
',evt) end
Инициируйте события выборочно с помощью логического индексирования со значениями, возвращаемыми event.hasListener
. Отправлять уведомления о событиях можно только для элементов массива, имеющих прослушиватели:
ind = event.hasListeners(a,'NameOfEvent
'); notify(a(ind),'NameOfEvent
',evt)
Если входной объектный массив неоднороден, класс массива должен задать заданное событие. Можно запросить у прослушивателей только события, которые задают все объекты массива.
Например, в следующей схеме класс разнородного массива, сформированного с объектами классов SpecificA
, SpecificB
, и SpecificC
является RootSuperclass
. Поэтому, event.hasListener
можно найти прослушиватели только для RootEvent
событие, поскольку это единственное событие, общее для всех элементов массива.
Создайте разнородный массив с тремя наиболее специфическими классами:
het = [SpecificA,SpecificB,SpecificC]; class(het)
ans RootSuperclass
events(het)
Events for class RootSuperclass RootEvent
event.hasListener
не может определить, существуют ли прослушиватели для событий, которые заданы некоторыми, но не всеми объектами массива:
event.hasListener(het,'ClassAEvent')
Error using event.hasListener
Event 'ClassAEvent' is not defined for class 'RootSuperclass'.
Определите, заданы ли прослушиватели для отдельных объектов в разнородном массиве, путем индексации в массив:
event.hasListener(het(1),'ClassAEvent')
Для получения дополнительной информации об определении класса разнородных массивов см. Раздел «Разработка гетерогенных иерархий классов».