Dojo初探之1:AMD规范,编写符合AMD规范(异步模块加载机制)的模块化JS(其中dojo采用1.11.2版本)
一、AMD规范探索
1、AMD规范(即异步模块加载机制)
我们在接触js的时候,一般都是通过各种function来定义一些方法,让它们帮我们做一些事情,一个js可以包含很多个js,而这些function都是单独存在。
在开发的时候我们会将几个function组合成一个功能,我们称这个功能的几个function为一个模块。
1.1、模块化JS
现在AMD规范定义了这种模块对象,我们称之为直接对象,用于封装这个模块种所有变量和方法。
举个例子:
<span style="font-size:18px;">var model1=(function() {
    var oldtext = {};
    var _setText = function(id, text) {
        var node = document.getElementById(id);
        oldtext[id] = node.innerHTML;
        node.innerHTML = text;
    };
    var _restoreText = function(id) {
        document.getElementById(id).innerHTML = oldtext[id];
    };
    return {
        setText: _setText,
        restore: _restoreText
    }
});</span>
这里我们定义了一个JS的直接对象,这个对象里面封装了一个数组变量和两个方法,return用于对外提供调用入口,现在我们可以直接通过model1().setText(id,text)或者model1().restore(id)的方式调用该对象里提供的方法。
当然现在我们可以按照AMD规范来这样写:
<span style="font-size:18px;">define (function() {
    var oldtext = {};
    var _setText = function(id, text) {
        var node = document.getElementById(id);
        oldtext[id] = node.innerHTML;
        node.innerHTML = text;
    };
    var _restoreText = function(id) {
        document.getElementById(id).innerHTML = oldtext[id];
    };
    return {
        setText: _setText,
        restore: _restoreText
    }
});</span>
没错,只把直接变量基础上把接收变量改为define就是一个符合AMD规范的异步模块了。
1.2、AMD规范简单到只有一个API(使用AMD)
define函数:
<span style="font-size:18px;">define([module-name?], [array-of-dependencies?], [module-factory-or-object]);</span>
module-name: 模块标识,可以省略。
array-of-dependencies: 所依赖的模块,可以省略。
module-factory-or-object: 模块的实现,或者一个JavaScript对象。
1.3、所以在Dojo中这样写就是定义了一个模块
define([
'dojo/dom'
], function(dom) {
var oldText = {};
return {
setText: function(id, text) {
var node = dom.byId(id);
oldText[id] = node.innerHTML;
node.innerHTML = text;
}, restoreText: function(id) {
var node = dom.byId(id);
node.innerHTML = oldText[id];
delete oldText[id];
}
};
});
既然我们定义了一个模块,自然要使用这个模块,如何使用?异步加载机制!
1.4、异步加载JS
有许多js库都是支持异步加载js的,比如比较流行的requrieJS,当然他们的用法都是一致的。
1.4.1、当然了,在实现异步加载自定义的JS模块我们还需要明确这个模块所在的目录:
<span style="font-size:18px;">var dojoConfig = {
    async: true,
    packages: [{name: "js",location: location.pathname.replace(/\/[^/]*$/, '') + '/js'
    }]
};</span>
1.4.2、完成了设置,我们就可以异步调用JS(不需要在页面中通过script标签加载JS):
<span style="font-size:18px;">require(["js/public/swapText"], function(swapText) {
         swapText.setText(index, msg);
    });</span>
后面会继续探讨dojo框架技术。。。。
Dojo初探之1:AMD规范,编写符合AMD规范(异步模块加载机制)的模块化JS(其中dojo采用1.11.2版本)的更多相关文章
- 对于模块加载:ES6、CommonJS、AMD、CMD的区别
		
运行和编译的概念 编译包括编译和链接两步. 编译,把源代码翻译成机器能识别的代码或者某个中间状态的语言. 比如java只有JVM识别的字节码,C#中只有CLR能识别的MSIL.还简单的作一些比如检查有 ...
 - Javascript模块化编程之CommonJS,AMD,CMD,UMD模块加载规范详解
		
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问 题进行系 ...
 - js与AMD模块加载
		
目的: 了解AMD规范与CMD规范,写一个模块加载器雏形. 基本概念: AMD是异步模块定义规范,而CMD是通用模块定义规范.其他的还有CommonJS Modules规范. 对于具体的规范,可以参考 ...
 - 构建服务端的AMD/CMD模块加载器
		
本文原文地址:http://trock.lofter.com/post/117023_1208040 . 引言: 在前端开发领域,相信大家对AMD/CMD规范一定不会陌生,尤其对requireJS. ...
 - JavaScript AMD 模块加载器原理与实现
		
关于前端模块化,玉伯在其博文 前端模块化开发的价值 中有论述,有兴趣的同学可以去阅读一下. 1. 模块加载器 模块加载器目前比较流行的有 Requirejs 和 Seajs.前者遵循 AMD规范,后者 ...
 - js模块加载之AMD和CMD
		
当我写这篇文章的时候,sea.js已经逐渐退出历史的舞台,详细链接.不过任何新事物的出现都是对旧事物的取其精华,去其糟粕,所以了解一下以前模块的加载也是一件好事. js模块化的原因自不比多说,看看HU ...
 - WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探
		
原文:WPF中自定义的DataTemplate中的控件,在Window_Loaded事件中加载机制初探 最近因为项目需要,开始学习如何使用WPF开发桌面程序.使用WPF一段时间之后,感 ...
 - 彻底搞清楚javascript中的require、import和export(js模块加载规范的前世今生)
		
为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Javascript不是一种模块化编程语言,在es6以前,它是不支持”类”(class),所以也 ...
 - [转]NHibernate之旅(13):初探立即加载机制
		
本节内容 引入 立即加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过上一篇的介绍,我们知道了NHibernate中默认的加载机制——延迟加载.其本质就是使用GoF23中代理模式 ...
 
随机推荐
- HDU 3948 不同回文子串个数
			
集训队论文中有求不同子串个数的做法,就是扫一遍height数组,过程中根据height数组进行去重.对于本题也是雷同的,只是每一次不是根据与排名在上一位的LCP去重,而是与上一次统计对答案有贡献的后缀 ...
 - Swift try try! try?使用和区别
			
Swift try try! try?使用和区别 一.异常处理try catch的使用 1. swift异常处理 历史由来 Swift1.0版本 Cocoa Touch 的 NSError ,Swif ...
 - PHP 安装 Xdebug 扩展(一)
			
一.前言 1. Xdebug 简介 Xdebug 是一个开放源代码的 PHP 程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况.当前最新版本为 Xdebug 2.5.0 ...
 - 二、Windows基础数据类型
			
六.Windows Data Types 简介: 6.1.这些数据类型都是C语言数据类型的再次的进行包装. 6.2.因为考虑到如果使用的是C中的基础数据类型可能无法表示,想表示的精准的含义. 6.3. ...
 - ES6相关新特性介绍
			
你可能已经听说过 ECMAScript 6 (简称 ES6)了.ES6 是 Javascript 的下一个版本,它有很多很棒的新特性.这些特性复杂程度各不相同,但对于简单的脚本和复杂的应用都很有用.在 ...
 - linux文件系统下的特殊权限
			
SUID, SGID, Sticky 1 权限 r, w, x user, group, other 2 安全上下文 前提:进程有属主和属组:文件有属主和属组: (1) 任何一个可执行程序文件能不能启 ...
 - VR全景加盟、720全景、VR全景技术平台-全国招商模式疯狂开始
			
VR全景:互联网与实体店的完美结合 VR元年已过,VR项目.VR创业潮转为理性,VR行业分为两个方向:硬件和内容.硬件又分为VR头显和辅助设备,内容又分为VR全景和VR虚拟内容,如游戏.娱乐.根据行 ...
 - JAVA-Socket通信笔记
			
JAVA - Socket 从开学到现在 也学了三个月时间的java了,一直在 在 语法和基本使用上周旋,井底之娃一枚. 这两天 有学长指点,花了两天的时间 学习了java多线程和socket的简单使 ...
 - windows下命令行cmder工具
			
windows下系统自带的命令行工具,实在是太丑了,输入命令后,有时排版乱七八糟,而且使用惯liunx系统的命令后,实在是不能够接受,这么蹩脚的工具:为此我给大家推荐一款实用的开源工具cmder 下载 ...
 - 模板类的约束模板友元函数:template friend functions
			
本来这篇博客是不打算写的,内容不是很难,对于我自己来讲,更多的是为了突出细节. 所谓template friend functions,就是使友元函数本身成为模板.基本步骤:1,在类定义的前面声明每个 ...