[dojo源码学习]环境加载

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)