当前位置: 代码迷 >> Web前端 >> dojo1.7的加载步骤
  详细解决方案

dojo1.7的加载步骤

热度:586   发布时间:2012-06-26 10:04:13.0
dojo1.7的加载方法

对于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" } 
 });
    
});
?

?