我有一个静态的类,因此所有方法都是静态的。由于我正在尝试跟踪操作过程的位置,因此我尝试定期触发事件以更新UI。我的课看起来类似于以下内容:
classdef foo < handle
events
Update
end
methods(Static)
function bar1()
...
notify([], 'Update', EvtData(val));
end
end
end
问题是,当我运行代码并进入notify([]...
行时,我收到以下错误:
未定义的命令/功能'notify'。
我假设这是一个事实,即这是一个静态方法被称为这样的事实:
foo.bar1()
如何在MatLab中的静态方法中触发/调用事件?
答案 0 :(得分:2)
Events与句柄对象相关联,句柄对象是触发事件的源(notify
)。如果没有触发您有兴趣收听的事件的对象(addlistener
),则无法注册事件处理程序。
根据课程在您的应用中的适用程度,您可以实施Singleton pattern:
classdef MyClass < handle
events
Update
end
%# private constructor
methods (Access = private)
function obj = MyClass()
end
end
methods (Static)
%# restrict instantiation of class to one object
function obj = getInstance()
persistent inst;
if isempty(inst)
inst = MyClass();
end
obj = inst;
end
%# register event listener
function registerListener(f)
persistent lh;
if ~isempty(lh)
delete(lh);
end
lh = addlistener(MyClass.getInstance(), 'Update', f);
end
%# some function that will trigger the event
function func()
notify(MyClass.getInstance(), 'Update')
end
end
end
>> MyClass.func
>> MyClass.registerListener(@(o,e)disp('updated'))
>> MyClass.func
updated
>> MyClass.func
updated