如何检查dojo主题事件是订阅还是取消订阅

时间:2016-11-24 05:03:17

标签: dojo

   someMethod : function() {  
        if ( !this._evt ) {
            this._evt = topic.subscribe("some-evt", lang.hitch(this, "_someOtherMethod"));
        } else {
            this._evt.remove();
            //Here this just remove the listener but the object this._evt is not null 
        }
    },

在这里,我只是想知道我们怎么才能知道这个班级已经订阅了' some-evt'

我不想在this._evt = null;

之后将this._evt.remove();设为空

1 个答案:

答案 0 :(得分:2)

很抱歉,dojo/topic实施通常不会提供topics / published subscribed的列表,也不会提供published / {该主题subscribed。 Dojo的实现符合此标准,即没有内置机制来获取主题列表。请注意,dojo/topic只有2个函数,publishsubscribe

您应该实现自己的想法,例如mixin,其功能是订阅topic并跟踪注册的主题名称,这只是一个想法

_TopicMixin.js

define(["dojo/topic"], function(topic){

    return {
        topicsIndex: {},

        mySubscribe: function(topicName, listener){
            this.topicsIndex[topicName] = topic.subscribe(topicName, listener);
        }

        myUnsubscribe: function(topicName){
            if(this.topicsIndex[topicName]){
                this.topicsIndex[topicName].remove();
                delete this.topicsIndex[topicName];
            }
        }

        amISubscribed: function(topicName){
            return this.topicsIndex[topicName];
        }
    };
});

如何使用

define(["dojo/_base/declare","myApp/_TopicMixin"], function(declare, _TopicMixin){

    return declare([_TopicMixin], {

        someMethod : function(){
            if ( !this.amISubscribed("some-evt") ) {
                this.mySubscribe("some-evt", lang.hitch(this, "_someOtherMethod"));
            } else {
                this.myUnsubscribe();
            }
        }
    });
});

希望有所帮助