手动将每个图层包含在页面上的脚本标记中。
<script src="path/to/dojo.js" />
<script src="path/to/dojox.js" />
<script src="path/to/dijit.js" />
这将使您在构建中定义的所有模块可用。当您需要该文本框时,Dojo 将看到它有代码并且不会进行 XHR 调用。
即使您不打算使用单个文件,您也可能希望将它们放在服务器上。这样,如果有人忘记将文件添加到构建中,则产生的惩罚是 xhr 请求,而不是 javascript 错误。
回复:AMD
当您以我上面描述的方式包含层时,您并没有加载包含构建的所有模块 - 您只是使定义函数可用,而无需发出 xhr 请求。
如果您查看构建输出的 js 文件,该文件包含模块路径到函数的映射,该函数在调用时将定义模块。
所以当你写下面的代码
require(["dijit/form/TextBox"], function(TextBox){
...
});
AMD 将首先确定是否dijit/form/TextBox
已经定义。如果是这样,它将只获取对象并执行回调。
如果模块尚未定义,则 AMD 将在其缓存中查看定义代码是否可用。当您包含脚本文件时,您将提供定义函数的缓存。AMD 找到定义模块的代码。它调用这个定义函数,结果是传递给回调的对象。后续的要求dijit/form/TextBox
也将如上所述使用此对象。
如果模块尚未定义且 AMD 未在其缓存中找到定义函数,则 AMD 将向服务器发出 XHR 请求以尝试定位特定模块代码。XHR 调用的结果应该提供定义函数。AMD 将调用该函数并将结果作为对象传递给回调。同样,后续的 requiresdijit/form/TextBox
也将使用此对象。
Dojo 构建提供了 1) 缩小代码和 2) 将其组合成需要从服务器请求的更少文件的能力。
AMD 允许您编写可在任一环境(使用构建文件或单个文件)中运行的代码,而无需进行修改。