从 topic.subscribe's 回调访问小部件

Access to widget from topic.subscribe's callback

本文关键字:回调 访问 小部 topic subscribe      更新时间:2023-09-26

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

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

您希望在 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/

该小部件有一些方便的方法,可以像 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