我可以伸展RequireJS为我的应用程序提供依赖注入多少?举个例子,假设我有一个我希望成为单身人士的模特.自执行getInstance()中不是单例 - 类型单例,而是上下文强制单例(每个"上下文"一个实例).我想做点什么......
require(['mymodel'], function(mymodel) {
...
}
Run Code Online (Sandbox Code Playgroud)
并让mymodel成为MyModel类的一个实例.如果我要在多个模块中执行此操作,我希望mymodel是相同的共享实例.
我已经通过制作mymodel模块成功完成了这项工作:
define(function() {
var MyModel = function() {
this.value = 10;
}
return new MyModel();
});
Run Code Online (Sandbox Code Playgroud)
这种用法是预期和常见的还是我滥用RequireJS?有没有更合适的方法可以使用RequireJS执行依赖注入?谢谢你的帮助.仍在努力抓住这一点.
我正在开发一个带有几十个模块的node.js应用程序,并使用bunyan进行日志记录(JSON输出,多个可配置流).我一直在寻找如何在所有模块中实现实例的很好的例子,但是还没有看到我可以从中学到的一个非常干净的例子.
下面说明了一种有效的方法,但对我来说似乎相当不优雅(丑陋).我一般都是node&commonjs javascript的新手,所以寻找有关如何改进它的建议.
module:./ lib/logger
// load config file (would like this to be passed in to the constructor)
nconf.file({ file: fileConfig});
var logSetting = nconf.get('log');
// instantiate the logger
var Bunyan = require('bunyan');
var log = new Bunyan({
name: logSetting.name,
streams : [
{ stream : process.stdout,
level : logSetting.stdoutLevel},
{ path : logSetting.logfile,
level : logSetting.logfileLevel}
],
serializers : Bunyan.stdSerializers
});
function Logger() {
};
Logger.prototype.info = function info(e) { log.info(e) };
Logger.prototype.debug = function debug(e) { log.debug(e) …Run Code Online (Sandbox Code Playgroud) 我有一个模型需要被几个视图访问,并在模型模块的定义中实现这一点我立即实例化它:
define([
'jquery',
'underscore',
'backbone'
], function(_, Backbone) {
var Foo = Backbone.Model.extend({
// wondrous methods and properties
});
return new Foo();
});
Run Code Online (Sandbox Code Playgroud)
我只需要这个模型的一个实例 - 现在就是这样.据我所知,解决方法是有一个单独的App模块.就像是:
define([], function() {
var App = {
routers: {},
models: {},
views: {}
};
return App;
});
Run Code Online (Sandbox Code Playgroud)
您可以在app启动时实例化和存储对象的引用:
require([
'App',
'Foo'
], function(App, Foo) {
App.models.foo = new Foo();
});
Run Code Online (Sandbox Code Playgroud)
但我觉得这是一个糟糕的选择,因为你基本上回到了拥有一个全局命名空间 - 这是RequireJS应该帮助避免的.
有没有其他选择,有没有什么好的理由可以避免像我上面描述的单身模型?