如何构建骨干/木偶应用程序而不预先加载所有内容

时间:2014-07-09 11:02:56

标签: javascript backbone.js requirejs marionette

我有一个使用require.js的marionette app的backbone.js。我还使用了https://github.com/SlexAxton/require-handlebars-plugin中找到的hbs插件的把手。

在我的应用程序开始时,我加载了一个路由器和一个控制器,当然这需要视图,因此它可以实例化它们并在区域上显示它们。

因此,在启动控制器要求视图时,视图需要它的js脚本依赖项,而hbs预加载模板。这导致我的应用程序从所有javascript文件和预先加载的html模板开始,就像用户正在下载桌面应用程序一样。我可以通过查看开发人员工具选项卡来确认这一点,以查看下载的内容。

var A = require(" a")即使在条件括号中也会被加载。

有没有办法加载js(它们自己加载模板(html文件))只有当用户实际导航到控制器的功能?

1 个答案:

答案 0 :(得分:0)

来自docs

  

AMD加载程序将使用Function.prototype.toString()

解析require('')调用

这意味着,如果你这样做:

define(function (require) {
    if(x) {
        var y = require('y');
    }
});

RequireJS将在调用函数之前解析所有需要调用,在条件中包装require无法实现。

请记住,对丢失脚本执行单个请求比解析大量从未调用过的代码要长。你想要做的事情可能不值得,甚至可能产生负面影响。对于生产用途,建议使用优化器,它始终将所有内容捆绑在一个文件中。

要回答您的问题,请避免使用CommonJS样式并调用模块内的异步require

define([], function () {
    if(x) {
        require(['y'], function (y) {
            y.doStuff();
        });
    }
});