前段时间,我在使用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.
}
)
为简洁起见,删除了一些必需调用,但是有少量dom
个需要,style
类,一些dijits
等等。当此页面加载时,会出现闪存没有风格的内容然后没关系。
使用Dojo Web Builder,我选择了我正在使用的模块并运行它。它下载了一个包含大量文件的zip,包括一个新的dojo.js
和custom_layer.js
。
所以现在我的问题是,如何使用这些新的组合和缩小文件代替我的“非构建”版本?我require
怎么办?或者我呢?
太困惑了......
答案 0 :(得分:8)
首先,让我们了解AMD(require / define)API的工作原理。
require([
'dojo/parser',
'dojo/dom',
'dojo/dom-class'
], function(parser, dom, domClass){
});
这将调用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,它应该可行。
答案 1 :(得分:0)
不确定这是否是最佳做法,但是当我第一次开始(几天前)时,我看到了无格式内容的闪现,并且只是隐藏了<body>
,看到了几个可以处理的示例。当Parse准备好展示时,它将取消隐藏它。
<body style="visibility: hidden;">