AMD 初步学习
AMD;Asynchrous Module Define 异步模块定义

Dojo 1,7 release也开始支持了AMD的module格式写法,这种写法使得代码编写起来更容易,也更容易debug。
为了兼容之前的Dojo,Dojo的loader默认会运行在Synchronous模式。要使用Asynchronously模式,需要进行一些配置,将async属性设置为true。

<script data-dojo-config="async: true" src="js/lib/dojo/dojo.js"></script>

Dojo的require函数:
require函数接受以下参数:
1,configuraton(可选参数,默认是undefined):这是一个object对象,这个对象是对loader的一些配置,
这些配置项允许在运行时重新配置loader。
2,dependencies(可选参数,default=[]):依赖的module的数组。如果指定了依赖的module,那么这些module会在代码解析之前resolved.
它们会按照指定的顺序load,并且按照这个顺序当做参数依次传到callback函数里。
3,callback函数:这个函数是你想依赖以上module“做的事情”,包装在这个函数里。
当require去加载依赖的module时,loader会解析这些module的代码,作为参数传给callback函数,分享给所有请求该模块的代码使用。

Dojo的define函数
define函数接受以下函数
1,moduleId (可选, 默认是undefined): module标识符,不被提供。很大程度上是为了早起的AMD loader 或者是为了支持AMD之前的dojo.
2,dependencies (可选, default=[]): module依赖的数组,同required中的dependencies,不同的是,这些module若指定,则依次当做参数,传递到factory函数里,供起使用。
3,factory: 这个可能是一个值,这个值就是module,此时不可以指定依赖module.也可能是个factory函数,返回一些值。
注意:当定义一个module,factory函数只会被调用一次。返回值会被loader缓存。
模块的创建是懒惰和异步的,不会在调用define时立即运行。这个意思就是factory 不会被执行。并且依赖的模块也不会下载并解析。直到有运行的代码需要这个模块。

Loader的工作原理:
当调用require的时候:
1,解析依赖module的module标识符,链接baseURL与传入的module标识符(这个过程中会考虑其他配置项带来的必要的配置修改)
2,此时,loader有URL定位到实际的module定义文件。loader会创建一个script标签,url设置为解析出来的文件路径。
3,一旦这个module被加载进来,计算这个module,这个值作为这个module的值。
4,loader会记住到每个module的引用,一旦某个module再次被请求,直接返回这个引用。

当AMD的module被加载的时候,在新插入script标签到页面中,这会导致define函数被调用。以上同样的步骤会发生在define加载相关依赖module。loader对这个module的引用指向的时factory函数的返回值。
若factory不是函数,而是值,则loader指向的是这个值。

Dojo 学习--ADM相关推荐

  1. Dojo学习笔记(一):Hello Dojo!

    欢迎来到Dojo世界!在这篇文章中你将会学习到如何加载Dojo以及探索Dojo的一些核心功能.你还会了解Dojo的基于AMD的模块架构,探索如何加载额外的模块来增加功能到您的Web站点或应用程序,并找 ...

  2. Dojo学习笔记(8. dojo.event dojo.event.topic dojo.event.browser)

    Dojo学习笔记(8. dojo.event & dojo.event.topic & dojo.event.browser) 模块:dojo.event 终于进入有名的dojo事件处 ...

  3. Dojo学习笔记(7. dojo.dom)

    Dojo学习笔记(7. dojo.dom) 模块:dojo.dom dojo.dom.isNode 测试指定对象是否为节点 Usage Example: dojo.dom.isNode(dojo.by ...

  4. Dojo Toolkit 创始人谈Dojo学习

    Dojo Toolkit 创始人谈Dojo学习 学习Dojo Toolkit时至少要清楚一点--你想要的是什么!在刚开始使用Dojo时,我基本的目标就是创建一个有用的JavaScript工具集而不必让 ...

  5. Dojo学习笔记(三):类化JavaScript

    dojo/_base/declare模块是Dojo Toolkit中创建类的基础.declare支持多重继承,这使得开发者能够编写更加灵活的代码并避免代码多次重写.Dojo.Dijit和Dojox模块 ...

  6. dojo调用php,dojo学习第一天 Tab选项卡 实现_dojo

    其实不然,用<精通Dojo>里的话来说就是"Dojo不只是一个程序库,而是一个工具包",它比其他所有的JS库的插件更全面更广阔.它包含大约40个用户界面控件.1个图形框 ...

  7. Dojo学习笔记一: 认识Dojo

        打算利用一些时间系统并且略深层次的学习一下Dojo这个框架,一个基于JavaScript脚本语言的集合.      Dojo不但提供各式各样的Javascript标准库方法,还包含了功能丰富的 ...

  8. Dojo学习13 dijit.Tree 动态添加节点之一

    为什么80%的码农都做不了架构师?>>>    13. dijit.Tree 动态添加节点之一 对dijit.Tree研究了很久,源代码也看了好多遍了.对于fx这个类的研究还需要更深 ...

  9. dojo 学习笔记之dojo.query - query(id) 与query(class)的差别

    考虑这个样例:动态创建一个页面的时候,用new listtem()生成多个listitem, 且每一个listitem中都生成一个按钮button. 假设想要给每一个按钮都绑定一个click事件,用d ...

最新文章

  1. c#泛型的使用[转]
  2. appender log4j 扩展_java-如何在log4j2中创建自定义Appender?
  3. 【干货】路由黑洞的5种解决方法大PK
  4. Ubuntu设置宽带连接DSL
  5. Android使用ConstraintLayout 加载RecyclerView数据显示不全
  6. mysqlperformanceblog
  7. SpringCloud 02_什么是分布式、多线程、高并发?(浅析)
  8. MySQL基础---增删改查语法
  9. Android studio下载安装使用遇到的问题及解决办法
  10. android系统(107)---Android路由表设置(route amp; DNS)
  11. java 获取dataset_Java OHLCDataset.getX方法代码示例
  12. matlab中std函数怎么写,Matlab中求均值和标准差的函数分别是mean(x)和std(x)。
  13. 组建优秀的团队-实现目标的开始
  14. unigui作中间件使用
  15. python 拍照搜题_大学慕课2020用Python玩转数据答案搜题公众号
  16. 锐浪报表 Grid++Report uniGUI Web表格打印
  17. pytorch中实现Balanced Cross-Entropy
  18. 电脑没有WiFi断网代码56解决方法CCleaner下载
  19. 什么是“荷花定律”?
  20. 不习惯的 Vue3 起步六 の Echarts绘制下钻地图

热门文章

  1. 2、ehcache与springBoot整合
  2. Python学习笔记——基础篇【第六周】——shutil模块
  3. A4纸张两面打印、每面打印2页的打印机设置
  4. 链表、数组、跳表时间复杂度
  5. 服务器系统怎么关机,服务器怎么关机了
  6. isb 汇编_DSB,ISB,DMB指令
  7. matlab 剪毛刺,MATLAB消除曲线毛刺Outlier Detection and Removal [hampel]
  8. css样式 元素自适应长宽比
  9. 甲骨文公司总裁Larry Ellison在耶鲁大学的演讲
  10. Linux高级服务搭建