Backbone和RequireJS有效加载

时间:2013-03-27 17:47:01

标签: javascript backbone.js requirejs amd 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'依赖关系,而路由器还不知道用户将来是否需要它们。

请提前告知,谢谢!

1 个答案:

答案 0 :(得分:6)

在这么小的示例应用程序中有点难以看到,因为你必须在初始路由上加载某些东西,而在Backbone中加载某些东西通常意味着一个模型,集合和视图。由于你链接的样本只有一个,所以是的,你几乎加载了所有东西。

在哪里开始看到“按需”功能,您可以在其中添加其他路线/视图/模型/等。但请记住,按需加载可能是AMD / RequireJS的次要目标。主要目标是modularity。然后,他们为您提供了许多选项,可以根据需要加载内容,也可以通过the optimizer

捆绑所有内容

此外,没有任何内容表明您必须将所有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;
});

有关更多背景信息,请参阅this person's article以及下一步可以使用的地方。