Backbone和RequireJS的有效加载

8
我在网上看了很多关于如何使用requireJS开发BB应用程序的例子,但我有点迷失。
我认为AMD的目标是只在真正需要时才加载文件。不会过早加载。
为什么我只看到开发者将几乎所有文件作为依赖项放在他/她的主文件开头的例子?
这里有一个例子: https://github.com/jcreamer898/RequireJS-Backbone-Starter/tree/master/js 该应用程序立即加载main.js,它依赖于app.js,后者加载routers/home.js,后者需要views/view.js,后者加载视图的模板和models/model.js,以此类推。
我无法看到如何扩展此应用程序,例如使用更多视图,其中视图的依赖项(其模型、模板、集合、第三方API等)仅在路由器调用和初始化它们时加载。否则,使用AMD加载所有文件将是没有意义的。
类似的例子在这里:http://backbonetutorials.com/organizing-backbone-using-modules/,查看router.js文件。实际上,它会加载'views/projects/list'和'views/users/list'这些依赖,而路由器还不知道用户将来是否需要它们。请给予建议,谢谢!
1个回答

6
在这样一个小的示例应用程序中很难看到,因为您必须在初始路由上加载something,而在Backbone中加载something通常意味着模型、集合和视图。由于您提供的示例只有一个模型、一个集合和一个视图,所以是的,您几乎加载了所有内容。
当您添加其他路由/视图/模型等时,您开始看到“按需”功能。然而,请记住,按需加载可能是AMD/RequireJS的次要目标。主要目标是模块化。然后,他们为您提供了许多选项,可以通过优化器按需加载或捆绑所有内容。
此外,并没有什么规定说您必须将所有require()放在文件开头。您可以稍后执行它们(例如,在初始化路由时)。以下是来自您第一个链接示例的home.js的修改版本。如果您使用Chrome开发工具,可以查看网络选项卡,当“debugger;”语句暂停执行时。然后继续执行并查看其余脚本如何加载。
define([
    'jquery', 
    'backbone', 
    'underscore'
    ], 
function($, Backbone, _){
    var Router = Backbone.Router.extend({
        initialize: function(){
            Backbone.history.start();
        },
        routes: {
            '': 'home'
        },
        'home': function(){
            debugger;
            require(['views/view'], function (mainView) {
                mainView.render();
            });
        }
    });

    return Router;
});

查看此人的文章,了解更多背景信息以及可能的下一步操作。


我添加了另一个示例,其中有更多的视图,但应用程序逻辑仍然缺乏这种按需点。 - zsitro
谢谢!你的示例和文章对我帮助很大。 - zsitro
太好了。每个路由都有大量文件加载。现在一切都很顺畅!谢谢! - matthoiland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接