2016-11-24 16 views
1
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 
     } 
    }, 

Здесь я просто хочу знать, как мы можем узнали, что этот класс уже подписались на «какой-еф».Как проверить додзё тему событие подписан или отписались

Я не хочу, чтобы установить this._evt = null; обнулить после this._evt.remove();

ответ

2

Извините, но dojo/topic реализации, как правило, не предоставляют список topics, которые были published/subscribed до, и ни кто published/subscribed к тому, что тема. Выполнение Dojo соответствует этому стандарту, что нет встроенного механизма для получения списка тем. Обратите внимание, что dojo/topic имеет только 2 функции, publish и subscribe.

Вы должны реализовать свою идею, что-то вроде 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(); 
      } 
     } 
    }); 
}); 

Надеется, что это помогает

 Смежные вопросы

  • Нет связанных вопросов^_^