1

我正在尝试使用此处记录的 Dojo 的 pub/sub 主题模块。我正在订阅自定义小部件startup()方法内的事件,并希望在触发主题时修改小部件。

如何从topic.subscribe()回调中访问小部件?在回调内部,this不引用小部件;我不确定它指的是什么......该this对象包括emiton功能,以及一个declaredClass看起来像"uniqName_0".

4

2 回答 2

2

在widget方法内部订阅时,你想用来dojo/_base/lang::hitch改变回调函数的作用域,这里this指的是widgets实例。你有几个选择:

  1. 匿名函数:

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

    topic.subscribe("topic/some", lang.hitch(this, "callbackMethod"));
    

看看它的实际效果:http: //jsfiddle.net/phusick/N7NGB/

于 2012-04-12T10:09:09.440 回答
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

使用subscribeandconnect方法时,在widget被销毁时会自动调用unsubscribeand方法。disconnect

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

于 2012-04-12T10:31:56.873 回答