不久前,我研究了使用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.jscustom_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/

10-14 06:49