我正在尝试使用此处记录的 Dojo 的 pub/sub 主题模块。我正在订阅自定义小部件startup()
方法内的事件,并希望在触发主题时修改小部件。
如何从topic.subscribe()
回调中访问小部件?在回调内部,this
不引用小部件;我不确定它指的是什么......该this
对象包括emit
和on
功能,以及一个declaredClass
看起来像"uniqName_0"
.
我正在尝试使用此处记录的 Dojo 的 pub/sub 主题模块。我正在订阅自定义小部件startup()
方法内的事件,并希望在触发主题时修改小部件。
如何从topic.subscribe()
回调中访问小部件?在回调内部,this
不引用小部件;我不确定它指的是什么......该this
对象包括emit
和on
功能,以及一个declaredClass
看起来像"uniqName_0"
.
在widget方法内部订阅时,你想用来dojo/_base/lang::hitch
改变回调函数的作用域,这里this
指的是widgets实例。你有几个选择:
匿名函数:
topic.subscribe("topic/some", lang.hitch(this, function() {
// your callback logic here
}));
小部件的方法:
topic.subscribe("topic/some", lang.hitch(this, "callbackMethod"));
看看它的实际效果:http: //jsfiddle.net/phusick/N7NGB/
小部件有一些方便的方法可以处理 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
andconnect
方法时,在widget被销毁时会自动调用unsubscribe
and方法。disconnect