Используйте 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')
Для получения дополнительной информации об определении класса разнородных массивов, смотрите Проектирующие Неоднородные Иерархии классов.