我目前正在使用介于所有模块之间的介体,并允许它们彼此之间进行通信。所有模块都必须通过调解器向所有正在收听的内容发送消息。我一直在阅读关于RequireJS的一些内容,但我没有找到任何文档如何最好地促进模块之间的通信。
我看过信号但是如果我理解正确的话,如果你通过调解员来运行信号,那么信号就不那么有用了。我只是想知道我还能尝试什么。我非常热衷于使用某种类型的回调模式,但是没有比调解器中的简单查找表更复杂。
以下是我发现的信号实现:https://github.com/millermedeiros/js-signals
以下是我发现的其他内容:http://ryanflorence.com/publisher.js/
是否存在针对此问题的标准化方法,或者必须一切都是依赖性驱动的?
答案 0 :(得分:3)
使用集中式事件管理器是一种相当常见且相当可扩展的方法。从你的问题中很难说出你对事件模型有什么问题(如果有的话)。典型的事情如下(使用发布者):
文件1:
require(['publisher','module1'],function(Publisher,Module1) {
var module = new Module1();
Publisher.subscribe('globaleventname', module.handleGlobalEvent, module);
});
文件2:
require(['publisher','module2'],function(Publisher,Module2) {
var module = new Module2();
module.someMethod = function() {
// method code
// when method needs module1 to run its handler
Publisher.publish('globaleventname', 'arguments', 'to', 'eventhandlers');
};
});
这里的主要优点是松耦合;而不是知道其他对象的方法的对象,对象可以触发事件,而其他对象知道如何处理该特定的应用程序状态。如果不存在处理事件的对象,则不会抛出任何错误。
这种方法有什么问题?
答案 1 :(得分:3)
以下是您可能想要尝试的内容: https://github.com/naugtur/overlord.js
它可以比普通的出版商或调解员做多一点。它允许创建一个通用API来访问任何模块的任何方法。
这是一种无耻的插件,因为它是我自己的工具,但它似乎与这个问题非常相关。
已添加对require.js
的支持。