Backbone和RequireJS有效加载

zsi*_*tro 8 javascript amd requirejs backbone.js js-amd

我在互联网上看了很多例子如何用requireJS开始开发BB应用程序,但我有点迷失.

我认为AMD的目标是只在真正需要时加载文件.不久

为什么我只看到开发人员将几乎所有文件作为依赖项放在他/她的主文件开头的示例?

这是一个例子:https: //github.com/jcreamer898/RequireJS-Backbone-Starter/tree/master/js

这个应用程序立即加载main.js,这取决于app.js加载router/home.js,这需要view/view.js加载视图的模板和models/model.js ......和结束.

我无法看到如何扩展此应用程序,例如更多视图,其中视图的依赖项(其模型,模板,集合,第三方API等)仅在路由器调用和初始化时加载.换句话说,在初始化应用程序时加载所有文件时使用AMD是无稽之谈.

类似的例子:http: //backbonetutorials.com/organizing-backbone-using-modules/请参阅router.js文件.实际上它加载'views/projects/list'和'views/users/list'依赖关系,而路由器没有知道用户将来是否需要它们.

请提前,谢谢!

exp*_*nit 6

这是一个有点很难在这么小的示例应用来看看,因为你要加载的东西最初的路线上,并装载东西的骨干通常意味着一个模型,收集和查看.由于你链接的样本只有一个,所以是的,你几乎加载了所有东西.

在哪里开始看到"按需"功能,您可以在其中添加其他路径/视图/模型/等.但请记住,按需加载可能是AMD/RequireJS的次要目标.主要目标是模块化.然后,他们为您提供了许多选项,可以根据需要加载内容,也可以通过优化器捆绑所有内容

此外,没有任何内容表明您必须将所有require()放在文件的开头.您可以稍后执行它们(例如,在启动路线时).这是您第一个链接示例中home.js的修改版本.如果您使用的是Chrome开发工具,则可以在"调试器"中查看网络选项卡.声明暂停执行.然后继续执行并查看其余脚本是如何加载的.

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;
});
Run Code Online (Sandbox Code Playgroud)

有关更多背景信息,请参阅此人的文章,以及您可能会在其中使用它的位置.