当使用松散耦合的Javascript模块(在Web浏览器中)使用Pub / Sub库时,是否有任何模式说明如何避免事件名称的魔术字符串?
我正在使用require.js和amplify.js来开发基于模块的Web应用程序。我正在使用amplify来发布和订阅事件,但当然这要求发布者和订阅者都知道事件标签是什么。我想避免为这些事件标签使用魔术字符串。我在想每个模块都有一个关联的“eventsList.js”文件,或类似的东西,列出模块将发布的事件。对于任何想要订阅其他模块事件的模块,它会导入每个感兴趣模块的每个事件列表,这也会阻止事件标签泄漏到全局命名空间。
我特别希望避免在我的应用程序中为每个模块设置“主事件列表”。
有没有人取得类似的成就?
答案 0 :(得分:2)
我还担心在我的主题中使用魔术字符串。你有没有找到合适的解决方案?我目前已经参加了主要活动列表,我对此并不特别满意:
var app = {
events: {
mod1: {
topica: 'topic-a',
topicb: 'topic-b'
},
mod2: {
topicx: 'topic-x',
topicy: 'topic-y'
}
}
}
//usage
amplify.publish(app.events.mod1.topica)