如何创建模块的实例并使用requirejs将其传递给另一个模块?

时间:2012-05-11 08:20:17

标签: backbone.js requirejs

我正在使用Backbone和Requirejs构建单页应用。

现在我一直在从模块文件中返回一个新实例,用以下结尾文件结束:

 return new moduleName;

这工作正常,直到我必须将参数传递给集合的initialize方法。由于在创建实例时调用了initialize,因此我从return语句中取出了“new”。

return mymoduleName;

在我的路由器中使用参数实例化集合:

myCollection = new library({paramname: "value"});

这确实创建了一个“库”的实例 - 我的路由器的定义块中引入的一个集合,但是如何将它传递给负责渲染它的视图?

我的视图类在其定义块中具有相同的依赖关系,并且在其初始化中我将其绑定到集合的重置:

this.collection = library;
_.bindAll(this, 'render');
this.collection.bind('reset', this.render);

这在从集合类中删除“new”之前有效(在回顾中根本没有意义!)但是现在视图永远不会被渲染,因为它在路由器中被实例化 - 我如何将相同的实例传递给观点?

1 个答案:

答案 0 :(得分:1)

不要在初始化方法中设置集合,而是在实例化视图的地方(在您的情况下,路由器)。

var myCollection = new library({paramname: "value"});
var myView = new myCustomView({ 
    collection: myCollection 
});

如果myCollection是您需要从其他地方访问的变量,您可以在路由器(myRouter.myCollection = ...)上设置它,您可以创建一个包含全局对象的模型({{1或者你可以简单地拥有一个全局变量(不推荐)。