Динамические свойства поддерживают набор свойств и получают события, таким образом, можно задать прослушиватели для этих свойств. Прослушиватели связаны с конкретным динамическим свойством, для которого они заданы.
Если вы удаляете динамическое свойство, и затем создаете другое динамическое свойство с тем же именем, прослушиватели не отвечают на события, сгенерированные новым свойством. Прослушиватель, заданный для динамического свойства, которое было удалено, не вызывает ошибку, но коллбэк прослушивателя никогда не выполняется.
События набора свойств и Запроса предоставляют больше информации о том, как задать прослушиватели для этих событий.
Чтобы ответить на сложение и удаление динамических свойств, присоедините прослушиватели объектов, содержащих динамические свойства. Класс dynamicprops
задает события с этой целью:
Добавленное свойство
Инициированный, когда вы добавляете динамическое свойство в объект, выведенный от класса dynamicprops
.
PropertyRemoved
— Инициированный, когда вы удаляете объект или объект meta.DynamicProperty
, сопоставленный с динамическим свойством.
ObjectBeingDestroyed
— Инициированный, когда объект уничтожается. Это событие наследовано от класса handle
.
Эти события сделали, чтобы общественность послушала, доступ (атрибут ListenAccess
) и частный уведомляет доступ (атрибут NotifyAccess
).
События PropertyAdded
и PropertyRemoved
передают объект event.DynamicPropertyEvent
коллбэкам прослушивателя. Объект данных о событиях имеет три свойства:
PropertyName
Имя динамического свойства, которое добавлено или удалено
Source
— Обработайте к объекту, который является источником события
EventName
Имя события (PropertyAdded
, PropertyRemoved
или ObjectBeingDestroyed
)
Предположим, что у вас есть приложение, которое создает динамическое свойство при определенных обстоятельствах. Вы хотите:
Установите значение скрытого свойства к true
, когда свойство под названием SpecialProp
будет добавлено.
Установите значение скрытого свойства к false
, когда SpecialProp
будет удален.
Используйте данные о событиях event.DynamicPropertyEvent
, чтобы определить имя свойства и добавлено ли это или удалено.
Класс DynamTest
выводит от dynamicprops
. Это задает скрытое свойство, HiddenProp
.
classdef DynamTest < dynamicprops properties (Hidden) HiddenProp end end
Задайте функцию обратного вызова, которая использует свойство EventName
данных о событиях определить, добавлено ли свойство или удалено. Получите имя свойства из свойства PropertyName
данных о событиях. Если динамическое свойство называют SpecialProp
, измените значение скрытого свойства.
function DyPropEvtCb(src,evt) switch evt.EventName case 'PropertyAdded' switch evt.PropertyName case 'SpecialProp' % Take action based on the addition of this property %... %... src.HiddenProp = true; disp('SpecialProp added') otherwise % Other property added % ... disp([evt.PropertyName,' added']) end case 'PropertyRemoved' switch evt.PropertyName case 'SpecialProp' % Take action based on the removal of this property %... %... src.HiddenProp = false; disp('SpecialProp removed') otherwise % Other property removed % ... disp([evt.PropertyName,' removed']) end end end
Создайте объект класса DynamTest
.
dt = DynamTest;
Добавьте прослушиватель для обоих событий PropertyAdded
и PropertyRemoved
.
lad = addlistener(dt,'PropertyAdded',@DyPropEvtCb); lrm = addlistener(dt,'PropertyRemoved',@DyPropEvtCb);
Выполнение обратного вызова события PropertyAdded
Добавление динамического свойства инициировало событие PropertyAdded
. Этот оператор добавляет динамическое свойство в объект и сохраняет возвращенный объект meta.DynamicProperty
.
ad = addprop(dt,'SpecialProp');
Сложение динамического свойства заставляет прослушиватель выполнять свою функцию обратного вызова, DyPropEvtCb
. Функция обратного вызова присваивает значение true
к свойству HiddenProp
.
dt.HiddenProp
ans = 1
Выполнение обратного вызова события PropertyRemoved
Удалите динамическое свойство путем вызова delete
на объекте meta.DynamicProperty
, который возвращен методом addprop
. Удаление объекта meta.DynamicProperty
инициировало событие PropertyRemoved
.
Удалите объект meta.DynamicProperty
, возвращенный при добавлении динамического свойства SpecialProp
.
delete(ad)
Коллбэк выполняется:
SpecialProp removed
Значением HiddenProp
является теперь false
.
dt.HiddenProp
ans = 0
meta.DynamicProperty
Можно получить объект meta.DynamicProperty
для динамического свойства с помощью findprop
. Используйте findprop
, если вам не возвратил объект addprop
.
ad = findprop(dt,'SpecialProp');