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' 依赖关系,而路由器没有知道用户将来是否需要它们。

请指教,提前谢谢!

4

1 回答 1

6

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

您开始看到“按需”功能的地方是您添加其他路线/视图/模型/等的地方。但是请记住,按需加载可能是 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;
});

请参阅此人的文章以了解更多背景信息以及下一步您可能会去哪里。

于 2013-03-27T18:01:25.643 回答