我正在尝试使用Dojo的pub / sub主题模块,如文档here所示。我在自定义窗口小部件的startup()
方法中订阅了一个事件,并希望在触发主题时修改窗口小部件。
如何从topic.subscribe()
回调中访问小部件?在回调中,this
未引用小部件;我不确定它是指什么...... this
对象包含emit
和on
函数,以及declaredClass
字段,看起来像{{1} }。
答案 0 :(得分:1)
在widget方法中订阅时,您希望使用dojo/_base/lang::hitch
来更改回调函数的范围,其中this
指的是小部件实例。你有几个选择:
匿名函数:
topic.subscribe("topic/some", lang.hitch(this, function() {
// your callback logic here
}));
widget的方法:
topic.subscribe("topic/some", lang.hitch(this, "callbackMethod"));
答案 1 :(得分:1)
小部件有一些方便的方法,可以像phusick描述的那样处理故障。
在启动方法中,您可以编写
startup: function() {
this.inherited(arguments);
this.subscribe('topic/some', '_onTopic');
},
_onTopic: function() {
this.something // 'this' is the widget
}
小部件有其他便利方法
this.unsubscribe
this.connect
this.disconnect
使用subscribe
和connect
方法时,小部件销毁时会自动调用unsubscribe
和disconnect
方法。