从topic.subscribe的回调访问小部件

时间:2012-04-12 08:45:44

标签: javascript dojo publish-subscribe

我正在尝试使用Dojo的pub / sub主题模块,如文档here所示。我在自定义窗口小部件的startup()方法中订阅了一个事件,并希望在触发主题时修改窗口小部件。

如何从topic.subscribe()回调中访问小部件?在回调中,this未引用小部件;我不确定它是指什么...... this对象包含emiton函数,以及declaredClass字段,看起来像{{1} }。

2 个答案:

答案 0 :(得分:1)

在widget方法中订阅时,您希望使用dojo/_base/lang::hitch来更改回调函数的范围,其中this指的是小部件实例。你有几个选择:

  1. 匿名函数:

    topic.subscribe("topic/some", lang.hitch(this, function() {
        // your callback logic here
    }));
    
  2. widget的方法:

    topic.subscribe("topic/some", lang.hitch(this, "callbackMethod"));
    
  3. 查看实际操作:http://jsfiddle.net/phusick/N7NGB/

答案 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

使用subscribeconnect方法时,小部件销毁时会自动调用unsubscribedisconnect方法。

http://dojotoolkit.org/api/dijit/_WidgetBase