对Backbone Marionette的困惑和需要交互以获得依赖关系

时间:2014-09-22 09:41:25

标签: javascript backbone.js requirejs marionette

我有点熟悉require.jsBackbone.js已经将它们一起使用了大约一年而且相对较新Backbone.Marionette尽管我对它能带来什么感兴趣

在寻找项目结构的例子时(我可以对这些东西有点痴迷)我找到了https://github.com/BoilerplateMVC/Marionette-Require-Boilerplate和其他类似的例子。

困扰我的事情:在他们的app.js文件中,他们返回对Marionette应用程序的实例的引用,即:

var app = new Backbone.Marionette.Application();
app.addInitializer(...);
...
return app;

在许多组件中,他们通过app.js引用require.js并使用如下:

define([..., 'app'], function (... , App) {
    App.someProperty(...);
});

现在这就是我不理解的地方:我一直假设他们app.js中的代码更像是 Factory 而不是 Class 因为它返回应用程序的实例,而不是修改原型或其扩展名。

因此,当他们引用app.js时,他们是不是实际创建了一个全新的实例而不是访问某种共享实例?没有任何迹象表明 app.js 在他们的代码中返回单例。

然而,它有效,显然我是那个困惑的人。

那么,为什么这有用呢?

1 个答案:

答案 0 :(得分:3)

这是有效的,因为对象在javascript中通过引用传递,而且require.js只加载一次依赖项。然后,app.js返回一个初始化的实例,而需要'app'的每个其他模块都会引用同一个对象。

它不是工厂,它只是一个初始化的应用程序对象实例。