对于dojo1.7来说,最大的变化就是引入了AMD异步加载器。
在1.7以前的版本,dojo的加载是同步加载的。由于dojo包含的内容很多,也就导致了dojo在页面加载时会显的有点慢。
现在在新版本中,dojo将要改变这一状况。页面加载时使用异步加载。只有在需要时才加载,而且只加载最小最核心的功能模块,这样,就会在最大程序中减少文件的下载量。
使用1.7的新特性将会有两个明显的不同点。
?
1.引入核心js时使用加载后解析属性。如
?
<script type="text/javascript" src="dojoroot/dojo/dojo.js" data-dojo-config="parseOnLoad: true"></script>
?
注意: 加了属性后,对于加载器来说只加载核心dojo.js并不加载别的模块内容,他会在页面加载完成后再去解析页面中的dojo部件。对于页面中dojo部件所需要的js必须使用require(["xxx"])来加载,不然会出现js错误。
?
2.在使用dojo的方法上有区别,以前是dojo.xxx而现在则使用require(["xxx"],function(){xxx})
注意,以前的dojo.xxx的写法是建立在已经加载了模块js的基础上。也就是dojo.require("xxx");dojo.xxx
使用dojo.require会加载整个模块包的js,也是以前版本的写法。
?
3.require内容不同,以前版本dojo.require("dojo.form.Button")而1.7版本require(["dojo/form/Button"])
?
在使用1.7版本时,可能代码上会觉的有点繁琐,但这也保证了页面的加载效率。
由于是异步加载,所以你并不知道你所使用的dojo模块或方法是否已经加载。这也就导致了基本上在每个页面中,如果你要使用某个模块,就必须在页面中使用require([])来加载你的模块,当然,也可以放到每个function中,以便实现更多的延迟加载。
不用当心重复的require,dojo会自动检查是否已经加载过相应的js,如果已经加载过了,它不会再次加载
?
?
示例:
以前版本的ajax写法
dojo.xhrPost({ form: "someFormId", content: { part:"one", another:"part" } });?
?
1.7版本的ajax写法
?
require(["dojo/_base/xhr"], function(xhr){ xhr.post({ form: "someFormId" content: { part:"one", another:"part" } }); });?
?