在组织我的Backbone对象到AMD(适用于中型到大型应用程序)时,我一直在努力在可重用性和复杂性之间取得适当的平衡
(A)每个Backbone对象(模型,视图等)都应该在自己的模块中吗? (B)相关的Backbone对象应该在同一个AMD模块中吗? (即:PersonModel,PersonCollection,PersonView对象在同一模块定义中)
选项(A)似乎允许最大的灵活性和可重用性,但由于(可能)大量文件,因此也是最复杂的。虽然选项(B)可以使管理事物变得更容易,但灵活性较差且难以进行单元测试。
其他人如何构建这些东西(或有)?
答案 0 :(得分: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
};
});
这样可以将模块组织在自己的文件中,并为每个类编写一个模块提供一些灵活性,而不需要为应用程序的其余部分公开此组织(我真的不喜欢写{{1每次我需要使用person的对象时,消费者更容易,更清晰地声明对“命名空间”而不是独立类的依赖。
答案 1 :(得分:1)
对于大中型骨干项目,我更喜欢使用requirejs,每个模型,集合和视图都有一个单独的模块。我还使用requirejs的“Text”插件,所以我可以加载下划线模板,就像我任何其他模块一样。这对我来说似乎是管理大型项目的最佳方式,我从来没有真正感受到我拥有的文件数量不堪重负。
在将您的应用推向生产时使用requirejs优化器+1。工作得很好。 http://requirejs.org/docs/optimization.html
答案 2 :(得分:0)
我刚刚发布了一个开源工具包,希望能帮助其他人,因为它可以帮助我。它由许多开源工具组成,可以为您提供开箱即用的工作requirejs骨干应用程序。
它提供了单个命令来运行:dev web server,jasmine单浏览器测试运行器,jasmine js-test-driver多浏览器测试运行器,以及JavaScript和CSS的连接/缩小。它还会输出一个未经编辑的应用程序版本,用于生产调试,预编译车把模板,并支持国际化。
无需设置。它只是有效。