Используйте функцию event.hasListener
, чтобы определить, имеет ли определенное событие прослушиватели. event.hasListener
принимает массив объектов источника события и имени события как входные параметры. Это возвращает массив логических значений, указывающих, существуют ли прослушиватели для заданного события на каждом объекте в массиве.
Когда названо, event.hasListener
должен иметь NotifyAccess
для события. Таким образом, вызовите event.hasListener
в контексте, в котором можно вызвать notify
для рассматриваемого события.
Используйте event.hasListener
, чтобы не отправлять уведомления о событии, когда не будет никаких прослушивателей для события. Например, если создание пользовательских данных о событиях использует значительные ресурсы, или если события неоднократно инициированы, используйте event.hasListener
, чтобы протестировать на прослушиватели прежде, чем выполнить эти шаги.
Conditionalize создание данных о событиях и вызова 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')
Для получения дополнительной информации об определении класса разнородных массивов, смотрите Разрабатывающие Неоднородные Иерархии классов.