相关疑难解决方法(0)

使用RequireJS进行依赖注入

我可以伸展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执行依赖注入?谢谢你的帮助.仍在努力抓住这一点.

javascript requirejs

35
推荐指数
1
解决办法
2万
查看次数

节点的常见日志记录,快速应用 - 最佳实践?

我正在开发一个带有几十个模块的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)

javascript logging node.js express bunyan

13
推荐指数
2
解决办法
7603
查看次数

带有RequireJS的Singleton Backbone模型:反模式?

我有一个模型需要被几个视图访问,并在模型模块的定义中实现这一点我立即实例化它:

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应该帮助避免的.

有没有其他选择,有没有什么好的理由可以避免像我上面描述的单身模型?

javascript requirejs backbone.js

8
推荐指数
1
解决办法
4316
查看次数

标签 统计

javascript ×3

requirejs ×2

backbone.js ×1

bunyan ×1

express ×1

logging ×1

node.js ×1