2012-07-26 24 views
3

是否有任何模式说明如何使用松散耦合的Javascript模块(在Web浏览器中)使用Pub/Sub库时避免使用事件名称的魔术字符串?Javascript发布和订阅 - 如何避免magic strings

我使用require.js和amplify.js来开发基于模块的Web应用程序。我使用放大来发布和订阅事件,但是这当然要求发布者和订阅者都知道事件标签是什么。我想避免为这些事件标签使用魔术字符串。我在想,每个模块都有一个关联的“eventsList.js”文件,或者类似的东西,它会列出模块发布的事件。对于任何想要订阅其他模块事件的模块,它都会为每个感兴趣的模块导入每个事件列表,这也可以防止事件标签泄漏到全局名称空间中。

我特别想避免在我的应用程序中为每个模块提供“主事件列表”。

有没有人取得类似的结果?

回答

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) 
+0

我不得不暂停我正在研究的项目,但没有进一步讨论。我开始实施我在我的问题中提出的解决方案(每个模块单独的.js文件,枚举事件名称),并且它工作正常,但我并未100%地将其作为“合适”的解决方案出售。 – DrBoom 2012-09-06 14:47:39