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