2012-05-11 27 views
0

我正在构建一个带有Backbone和Requirejs的单页应用程序。如何使用requirejs创建模块的实例并将其传递给另一个模块?

现在我已经从我的模块文件返回一个新的实例,与结尾的文件:

return new moduleName; 

这个工作确定,直到我不得不参数传递给集合的初始化方法。由于初始化是在创建实例时调用的,所以我将“new”从return语句中移开。

return mymoduleName; 

并实例在我的路由器的参数的集合:

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

这确实是创造了“库”的实例 - 在我的路由器引入的定义块,但我怎么把它传递到集合负责渲染的视图?

我的观点类具有相同的依赖于它的定义块,并在其初始化我把它绑定到集合的复位:

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

这从集合类带走了“新”的工作之前(其上追溯是毫无意义的!)但现在视图永远不会呈现,因为它已经在路由器中实例化了 - 我如何将同一个实例传递给视图?

回答

1

不要在其初始化方法中设置集合,但是无论您在哪里实例化视图(在您的情况下,路由器)。

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

如果myCollection是你需要从其他地方访问,以及一个变量,你可以将它设置路由器(myRouter.myCollection = ...),你可以创建一个保存全局对象(MyAppGlobals)的模型上,或者你可以简单地一个全局变量(不推荐)。

+0

谢谢,同时我得到它与以下工作 - 不完全确定,如果这实际上是你说的: 库=新库({参数名称:“价值”}); myView =新视图({collection:library}); 然后,在视图的初始化中: 初始化:函数(opts){ \t this.collection = opts.collection; } – wannabeartist

+0

所以基本上,我有点困惑“不要在初始化中设置集合” - 是不是在构造函数参数被处理? – wannabeartist

+0

初始化时无需执行'this.collection = opts.collection',如果您查看Backbone文档,它会说:“创建新视图时,您传递的选项将作为this.options附加到视图中,以备将来使用有几个特殊选项,如果通过,将直接附加到视图:model,collection,el,id,className,tagName和attributes。“ (http://documentcloud.github.com/backbone/#View-constructor) – slurmomatic

相关问题