2012-04-12 62 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/