在backbone.js的上下文中依赖注入

时间:2014-09-11 12:00:30

标签: javascript backbone.js dependency-injection requirejs

我在角度js中听到很多关于依赖注入(DI)的内容。我们如何在backbone.js中实现相同目标。我正在浏览相同但所有文章都在requirejs用于主干中的DI。骨干是如何做DI或如​​何在骨干中实现DI?

2 个答案:

答案 0 :(得分:1)

Backbone没有包含DI的概念。它更像是一个库而不是一个框架。通常,像requirejs或browserify这样的工具会为您进行依赖注入。

我更喜欢它的CommonJS风格,在需要时调用require("module"),如下所示:

//in file models/dependency1.js
define(function(require, exports, module){
  var Backbone = require("backbone"); //shimmed in requirejs config
  module.exports = Backbone.Model.extend({
    defaults: {
      name: "Silly Model"
    } 
  });
});

//in another file
define(function(require, exports, module){
  var Backbone = require("backbone"), 
      SillyModel = require("models/dependency1");

  module.exports = Backbone.Collection.extend({
    model: SillyModel
  });
});

当然,这不是真正的 DI,因为您使用Java或.NET获得接口,但您也可以在需要时使用工厂模式,以便能够动态地提供依赖关系。

您也可以拨打require(XXX)而不是SillyModel

module.exports = Backbone.Collection({
  model: require("models/dependency1")
});

我更喜欢将依赖项摘要放在顶部,它简化了对此文件的理解。 :)

希望它有所帮助!

答案 1 :(得分:1)

cujo.js/wire将为您提供在JS中使用DI的架构工具集。它还捆绑了许多其他好东西(Promise,Polyfill,AOP,DOM处理等)。

它允许您以声明方式创建组件并连接这些组件,将引用注入到组件中。 github wiki page

Here是指向Github repo的链接,演示了如何并排使用cujo.js/wirebackbone.js