Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 你如何构建你的主干+;RequireJS应用程序?_Backbone.js_Structure_Requirejs - Fatal编程技术网

Backbone.js 你如何构建你的主干+;RequireJS应用程序?

Backbone.js 你如何构建你的主干+;RequireJS应用程序?,backbone.js,structure,requirejs,Backbone.js,Structure,Requirejs,在将我的主干对象组织到AMD中(用于中大型应用程序)时,我一直在努力在可重用性和复杂性之间取得正确的平衡 (A) 每个主干对象(模型、视图等)是否都应该在自己的模块中? (B) 相关主干对象是否应位于同一AMD模块中?(即:同一模块定义中的PersonModel、PersonCollection、PersonView对象) 选项(A)似乎允许最大的灵活性和可重用性,但由于(可能)大量的文件,它也最为复杂。虽然选项(B)可能会使事情更容易管理,但灵活性较低,而且单元测试非常困难 其他人是如何构造这

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

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

选项(A)似乎允许最大的灵活性和可重用性,但由于(可能)大量的文件,它也最为复杂。虽然选项(B)可能会使事情更容易管理,但灵活性较低,而且单元测试非常困难


其他人是如何构造这些东西的?

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

+1在将应用程序推向生产时使用requirejs优化器。效果非常好。

我认为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”…)
每当我需要使用person的对象时,消费者就更容易、更清晰地声明对“命名空间”的依赖关系,而不是独立类)

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

它提供了单个命令来运行:devweb服务器、jasmine单浏览器测试运行程序、jasmine js测试驱动程序多浏览器测试运行程序,以及JavaScript和CSS的concatenation/minification。它还输出应用程序的未统一版本以进行生产调试,预编译把手模板,并支持国际化

不需要设置。它只是工作


我不确定这个问题是否有正确的答案,尽管我的偏好是让每个模型、视图和集合都有自己的模块。是的,你会有大量的文件(别忘了你的模板文件!-),但这对我来说不是什么大问题。我只是确保我的文件名给我一个线索,告诉我它们在哪个更大的上下文中,并将所有相关的文件放在适当的文件夹中。在大约250行代码之后,无论如何都很难阅读,所以每个主干模型、视图和集合都有一个模块,这样管理起来就容易多了。但我认为文件的数量对性能很重要(太多的文件和到服务器的往返行程会急剧增加)。所以,也许你可以试着维护模块化的东西,当你为生产构建时,使用某种“编译器”(闭包可能?)来减少和合并JS文件大小。Helios:RequireJS可以做到这一点。谢谢devundef-我也在玩弄这个主意。这似乎对我当前的实现最有意义。这样一来,对于“消费者”来说,这就简化了一点,但是模块化得到了维护。酷-但是你忘了提到项目的名称:-),除非你说的是Yeomen。