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();
设为空
答案 0 :(得分: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();
}
}
});
});
希望有所帮助