dojo的文档实在不敢恭维,学习dojo,我个人认为读源码是个比较好的方式。
首先这个引用,你懂的
<script type="text/javascript" src="dojo/dojo/dojo.js"></script>
故事就是这么开始的,dojo就这么被用上了![]()
- dojo.js
打开dojo.js,一大段注释就映入眼帘了...(dojotoolkit.org上的的文档其实就是这些源代码附带的玩意,与其去网上找,还不如直接查看源代码),让我们直接进入正题if(typeof dojo == "undefined"){ // only try to load Dojo if we don't already have one. Dojo always follows // a "first Dojo wins" policy. (function(){ //省略各种内容 })(); };首先要注意,这里有个注释我保留了,留意一下这个policy,再后来的dojo.require里也有体现。 (其实这玩意技术上很简单,关键在留一下这个思想,已经这个思想在整个体系里的表现和贯穿) 再就是我想对这种模式(function(){})()插一嘴,其实只要注意到()在javascript可以看成是invocation operator就好了 稍微掳两眼就会发现这个dojo.js主要是来加载其他js文件的(感觉这句说了和没说一个效果
),以及定义了在不同环境 下加载js文件的不同方式。 很容易的,就会发现接下来dojo.js加载了 dojo/dojo/_base/_loader/bootstrap.js dojo/dojo/_base/_loader/loader.js dojo/dojo/_base/_loader/hostenv_browser.js dojo/dojo/_base.js"
- bootstrap.js 用过dojo的应该在firebug里没少看过"bootstrap"。具体下来,bootstrap也就是解析了dojo config,定义了dojo, 以及一些其他的dojo全局方法。
- loader.js 这个文件里出来定义了dojo的module管理方法,最特别的是申明了一个“define”全局方法,整个dojotoolkit就是引入 了2个全局变量(dojo, define),由此可以这个define还是有点拽的。我对define的理解就是,在异步加载条件下, 模块化管理管理js代码的工具。当然,可以忽略我的理解,参考这里http://dojotoolkit.org/features/1.6/async-modules
- hostenv_browser.js
这个没啥好说的,就加上了相关的环境信息,以及load相关的 - _base.js
到目前为止,基本上dojo的整个module管理模型就以及初始化成型了。_base.js只是简单的把一些工具默认的随dojo加载到了当前环境,所有这些就构成了dojo core。define("dojo/_base",[ "dojo/_base/lang", "dojo/_base/array", "dojo/_base/declare", "dojo/_base/connect", "dojo/_base/Deferred", "dojo/_base/json", "dojo/_base/Color", dojo.isBrowser? "dojo/_base/browser" : "dojo/_base/lang"], function(){ return dojo; });其中值得一提是declare, connect, 和Deferred。
基本上,dojo就是这样进入页面的。
本文详细解读了Dojo框架的启动流程,包括如何通过加载器加载核心模块,以及如何使用模块系统进行异步加载。重点介绍了模块加载器、核心配置解析、模块管理方法和关键组件如declare、connect、Deferred等的作用。
128

被折叠的 条评论
为什么被折叠?



