我应该在哪里将Collection实例放在Backbone.js中?

时间:2012-03-07 22:17:43

标签: javascript backbone.js

最好将它放在全局对象中还是放在View实例中?

(我想如果我将它放在全局上,例如:window.todos = new Todos(),如果有很多集合,它会污染全局对象;但是,将它放在视图中可能会使事情成为有点混乱)

根据您的经验,放置它的最佳方式在哪里?

1 个答案:

答案 0 :(得分:3)

我认为这实际上取决于您的申请。我通常做的是为应用程序建立一个名称空间,并将集​​合放在那里,以及视图:

// namespace for the application
var app = {};

// collection classes are also within the namespace
app.ToDos = Backbone.Collection.extend({ ... });

// and collection instances are in the namespace as singletons
app.todos = new app.ToDos();

对于大型应用程序,您可以更进一步,为模型类,视图类,路由器类和应用程序实例建立子命名空间。这有一些优点,但它们都不是真正重要的:

  • app命名空间中提供集合允许在必要时从多个视图中引用它们

  • 调试时,您可以访问控制台中的集合

  • 为您的应用程序建立一个新的命名空间允许您添加许多新的全局变量,而不会污染全局命名空间或担心与其他库的错误交互

最后一点是对应用程序命名空间的一个非常好的论据,但它并不一定意味着您的集合需要位于命名空间的顶层,或者全局可用。主要问题是能够在特定父视图(或父模型)之外访问集合的重要性。如果您确定该集合是一次性的,那么将它完全保留在应用程序命名空间之外可能会更清晰。