【问题标题】:Access to widget from topic.subscribe's callback从 topic.subscribe 的回调中访问小部件
【发布时间】:2012-04-12 08:45:44
【问题描述】:
我正在尝试使用 here 中记录的 Dojo 的 pub/sub 主题模块。我正在订阅自定义小部件的 startup() 方法中的一个事件,并希望在触发主题时修改小部件。
如何从topic.subscribe() 回调中访问小部件? 在回调内部,this 不引用小部件;我不确定它指的是什么...this 对象包括emit 和on 函数,以及一个看起来像"uniqName_0" 的declaredClass 字段。
【问题讨论】:
标签:
javascript
dojo
publish-subscribe
【解决方案1】:
您想在widget方法内部订阅时使用dojo/_base/lang::hitch来改变回调函数的范围,其中this指的是widgets实例。你有几个选择:
-
匿名函数:
topic.subscribe("topic/some", lang.hitch(this, function() {
// your callback logic here
}));
-
widget的方法:
topic.subscribe("topic/some", lang.hitch(this, "callbackMethod"));
查看实际操作:http://jsfiddle.net/phusick/N7NGB/
【解决方案2】:
这个小部件有一些方便的方法来处理 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方法将被自动调用。
http://dojotoolkit.org/api/dijit/_WidgetBase