我有一个处理沙箱的中介对象。
每个沙箱都必须在调解员处注册。因为我也使用requirejs这是一个小问题因为我不知道如何分享实例而不是原型:
mediator.js
define([], function() {
var Mediator = function() {};
Mediator.prototype.start = function() {};
Mediator.prototype.stop = function() {};
Mediator.prototype.register = function() {};
Mediator.prototype.unregister = function() {};
return Mediator;
});
sandbox_one.js
define(['mediator'], function(Mediator) {
var mediator = new Mediator();
mediator.register('sandboxOne', SandboxObject);
});
sandbox_two.js
define(['mediator'], function(Mediator) {
var mediator = new Mediator();
mediator.register('sandboxtwo', SandboxObject);
});
正如您在当前方法中所提到的,我在两个不同的调解器上注册了沙盒。解决这个问题的一个想法是使用单例模式,但这与架构冲突并需要建议。
那么还有什么其他方法可以让沙箱将所有内容注册到Mediator的同一个实例?
答案 0 :(得分:2)
由于我无法发表评论,我将发布一个答案。
ggozad解释了如何在RequireJS中执行单例操作:Is it a bad practice to use the requireJS module as a singleton?
他的代码:
define(function (require) {
var singleton = function () {
return {
...
};
};
return singleton();
});
答案 1 :(得分:0)
实际上, RequireJS 你已经收到了单身人士,所以如果你打电话:
require(['mediator'], function(Mediator) {
....
});
Mediator
将始终是同一个对象。如果它是构造函数,通过调用new Mediator()
,您将始终创建一个新实例,但每次都会使用相同的函数。
但你不必返回一个函数:
define([], function() {
return {
start: function() {},
stop: function() {},
register: function() {},
unregister: function() {}
};
});
现在你的Mediator
将是一个实例,而不是一个函数,你不能将它用作函数。你的例子现在看起来像:
require(['mediator'], function(Mediator) {
Mediator.register('sandboxOne', SandboxObject);
});
免责声明:我在 Dojo 中使用 RequireJS 版本内置。