【问题标题】:Access to widget from topic.subscribe's callback从 topic.subscribe 的回调中访问小部件
【发布时间】:2012-04-12 08:45:44
【问题描述】:

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

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

【问题讨论】:

    标签: javascript dojo publish-subscribe


    【解决方案1】:

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

    1. 匿名函数:

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

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

    查看实际操作:http://jsfiddle.net/phusick/N7NGB/

    【讨论】:

      【解决方案2】:

      这个小部件有一些方便的方法来处理 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

      【讨论】:

        猜你喜欢
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 2021-04-12
        • 2018-02-21
        • 1970-01-01
        • 2012-06-27
        • 2012-10-29
        相关资源
        最近更新 更多