我正在尝试使用此处记录的 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
使用subscribeandconnect方法时,在widget被销毁时会自动调用unsubscribeand方法。disconnect