15

在将我的 Backbone 对象组织到 AMD(用于中型到大型应用程序)中时,我一直在努力在可重用性和复杂性之间取得适当的平衡

(A) 每个 Backbone 对象(模型、视图等)都应该在它们自己的模块中吗?(B) 相关的 Backbone 对象是否应该在同一个 AMD 模块中?(即:同一模块定义中的PersonModel、PersonCollection、PersonView对象)

选项 (A) 似乎允许最大的灵活性和可重用性,但也最复杂,因为(可能)有大量文件。虽然选项(B)可能更容易管理事物,但灵活性较差,并且确实难以进行单元测试。

其他人是如何(或已经)如何构建这些东西的?

4

3 回答 3

5

我对 requirejs 的好处是它允许您将物理文件抽象为结构化的命名空间。您可以采用方法(A)并在它们自己的文件中创建每个主干类,然后创建一个“命名空间”模块将所有相关类粘合在一起。

// Suppose you have PersonView.js, PersonCollectionjs, PersonModel.js as modules
// create a Person module to function as namespace
define(["PersonModel", "PersonCollection", "PersonView"], function(model, collection, view) {
     return {
        Model: model,
        Collection: collection,
        View: view
     };  
});

这样可以将模块组织在自己的文件中,并让您可以灵活地为每个类编写一个模块,而无需您为应用程序的其余部分公开此组织(我真的不喜欢require("PersonView", "PersonModel" ... )每次需要使用时都必须编写人的对象,消费者更容易和更清晰地声明对“命名空间”而不是独立类的依赖)。

于 2012-08-29T22:30:15.347 回答
1

对于大中型骨干项目,我更喜欢使用 requirejs,每个模型、集合和视图都有一个单独的模块。我还为 requirejs 使用了“文本”插件,因此我可以像加载任何其他模块一样加载下划线模板。对我来说,这似乎是管理大型项目的最明智的方式,而且我从未真正对拥有的文件数量感到不知所措。

在将您的应用程序投入生产时使用 requirejs 优化器 +1。效果很好。 http://requirejs.org/docs/optimization.html

于 2012-08-28T13:47:46.093 回答
0

我刚刚发布了一个开源工具包,希望它能帮助其他人,就像它帮助我一样。它是许多开源工具的组合,它为您提供了一个开箱即用的 requirejs 主干应用程序。

它提供单个命令来运行:dev web server、jasmine 单浏览器测试运行器、jasmine js-test-driver 多浏览器测试运行器,以及 JavaScript 和 CSS 的连接/缩小。它还输出应用程序的未缩小版本以进行生产调试,预编译您的车把模板,并支持国际化。

无需设置。它只是工作。

http://github.com/davidjnelson ...

于 2013-02-16T19:41:38.083 回答