我有一个使用require.js的marionette app的backbone.js。我还使用了https://github.com/SlexAxton/require-handlebars-plugin中找到的hbs插件的把手。
在我的应用程序开始时,我加载了一个路由器和一个控制器,当然这需要视图,因此它可以实例化它们并在区域上显示它们。
因此,在启动控制器要求视图时,视图需要它的js脚本依赖项,而hbs预加载模板。这导致我的应用程序从所有javascript文件和预先加载的html模板开始,就像用户正在下载桌面应用程序一样。我可以通过查看开发人员工具选项卡来确认这一点,以查看下载的内容。
var A = require(" a")即使在条件括号中也会被加载。
有没有办法加载js(它们自己加载模板(html文件))只有当用户实际导航到控制器的功能?
答案 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();
});
}
});