javascript - Backbone 和 RequireJS 有效加载

标签 javascript backbone.js requirejs amd js-amd

我在互联网上看了很多如何开始使用 requireJS 开发 BB 应用程序的示例,但我有点迷茫。

我认为 AMD 的目标是仅在文件确实需要时才加载它们。不早了。

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

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

此应用程序立即加载 main.js,它依赖于 app.js,它加载 routers/home.js,它需要 views/view.js,它加载 View 的模板和 models/model.js,它......并结束。

我看不出如何扩展此应用程序,例如使用更多 View ,其中 View 的依赖项(其模型、模板、集合、第三方 API 等)仅在路由器调用并初始化它们时加载。否则,在初始化应用程序时加载所有文件的地方使用 AMD 将是无稽之谈。

类似的例子在这里: http://backbonetutorials.com/organizing-backbone-using-modules/ 请参阅 router.js 文件。实际上,它会加载“views/projects/list”和“views/users/list”依赖项,而路由器尚不知道用户将来是否需要它们。

请指教,提前致谢!

最佳答案

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

您开始看到“按需”功能的地方是您添加其他路线/ View /模型/等的地方。但是请记住,按需加载可能是 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了解更多背景知识以及下一步可能去哪里。

关于javascript - Backbone 和 RequireJS 有效加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15665819/

相关文章:

javascript - jQuery noconflict、bootstrap 和 requirejs

jquery - RequireJS 和 Jquery - 一个文件中有多个模板?

javascript - TinyMCE,将 HTML 插入特定的 TinyMCE 实例

javascript - HTML 自动幻灯片

JavaScript 类奇怪的作用域

javascript - backbone.js 错误处理与 Laravel 问题

javascript - View 中的 Backbone.js EL 和模板

javascript - 从服务器获取 react 后我收到空对象

search - 使用搜索参数获取 Backbone 集合

javascript - 如果我想使用 RequireJS,我真的需要更改我的 document.ready 部分吗?