2012-04-12 48 views
0

我试图使用Dojo的pub/sub主题模块here。我正在订阅自定义小部件的startup()方法中的事件,并且想要在主题被触发时修改小部件。从topic.subscribe的回调访问小部件

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

回答

1

w idget有一些便利的方法,可以像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

1

您希望使用dojo/_base/lang::hitch更改订阅内部窗口小部件方法时回调函数的作用域,其中this引用窗口小部件实例。你有几个选择这里:

  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/