不久前,我研究了使用Dojo和Dojo主题时“未样式化内容的闪烁”的解决方案。有人建议通过创建构建来结合所有内容,这将减少加载/解析时间并消除使用预加载器覆盖等的需要。
但是,Dojo似乎严重缺乏直接的,“真实世界”的使用示例和教程,其中包括许多功能,尤其是此功能。许多资源告诉您如何设置构建,但没有实现方法。
假设我在“pageinit.js”中有这个:
require([
'dojo/parser',
'dojo/dom',
'dojo/dom-class',
//etc...
'dijit/form/ValidationTextBox',
'dijit/form/CheckBox',
// etc...
// Dom Ready call
'dojo/domReady!']
function(
Parser,
Dom,
Class,
// etc...){
// do stuff with parser, dijits, so on.
}
)
为了简洁起见,删除了一些require调用,但是有一些
dom
require,style
类,一些dijits
等。加载此页面时,会出现未样式化内容的提示,然后就可以了。使用Dojo Web Builder,我选择了正在使用的模块,然后运行它。它下载了一个包含大量文件的zip文件,其中包括一个新的
dojo.js
和custom_layer.js
。所以现在我的问题是,如何使用这些新的合并和缩小的文件代替我的“非构建”版本?我该怎么写
require
?还是我如此迷茫...
最佳答案
首先,让我们了解AMD(require/define)API的工作方式。
require([
'dojo/parser',
'dojo/dom',
'dojo/dom-class'
], function(parser, dom, domClass){
});
这将调用require函数,指定我需要三个模块才能完成某些工作。 require将获取每个模块。如果将确定模块是否已加载。如果没有,它将异步获取文件,并将模块加载到javascript运行时中。一旦require检索了所有必需的模块,它将执行您的回调(该函数),将这些模块作为参数传递给该函数。
接下来,让我们了解构建。 dojo构建完全按照您的描述进行操作。它将把一堆文件压缩成一个文件。这样可以加快页面加载速度,并防止您描述的“闪光”。
最后,将所有内容放在一起,您应该将
custom_layer.js
文件与dojo.js
文件一起包括在内。<script type="text/javascript" src="path/to/dojo/dojo.js" />
<script type="text/javascript" src="path/to/custom_layer.js" />
Web浏览器将加载这两个文件并评估代码。不再懒惰地在其自己的文件中加载每个模块,而是已经加载了该模块,因为它是在
custom_layer.js
中定义的。因此,最后一个问题的答案是,您不应基于所使用的特定版本的代码(源代码或自定义版本)来更改任何代码。使用AMD api,它应该可以正常工作。
关于Dojo建立...?现在怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12922618/