异步模块加载与定义. .amd 是 dances 核心.
- dances.add
- dances.define
定位于脚本加载器. 语法极其灵活.
-
dances .add(src[, src1][, srcN][, callback]) ; -
dances .add(src, callback) ; -
dances .add(src) .add(callback) ; -
dances .add(src) .add(callback) .add(src2) .add(src3) ; -
dances .add(src) .add(src2) .add(src3, src4, src) .add(callback) ;
// 模板页
dances
.add(require1, require2, require3)
.add(function(){
// do with code
})
;
// 子页
dances
// notice "require3" !
.add(require3)
.add(require4)
.add(require5)
;
定位于精度模块加载管理, 遵循 AMD 机制.
define([id, ][dependencies, ]factory);
-
id:
定义模块名称, 如果模块名被省略不写,则是一个匿名模块, 模块引用与 它文件路径和文件名有关 // The AMD loader will give the module an ID based on how it is referenced by other scripts -
dependencies:
定义中模块依赖模块的数组. -
factory
工厂函数, 模块的定义.
全称, 工厂函数形参关键字.
具体应用环境: 省略依赖时, 默认作为形参的三个对象集合.
- require
- exports
- module
-
rule 0: 依赖模块中的模块按照依赖顺序实现, 并且实现的结果应该按照依赖数组中的位置顺序以参数的形式传入(定义中模块的)工厂方法中
-
rule 1: 要在 dependencies 中, 使用定义模块中的 "require" | "module" | "exports", 必须显示地使用它们. 本规则遵守 rule 0
-
rule 2: 省略 dependencies, factory 的形参默认使用 "require" | "exports" | "module", 而且形参长度以 factory.length 为准, 另外, 形参名字没有要求必须使用 "require" | "exports" | "module" 关键字.
依赖参数是可选的, 如果忽略此参数, 则 factory 函数的形参默认为 ["require", "exports", "module"], 如下:
define(function(require, exports, module){
// factory
});
注意: 工厂函数, 并没有定义形参, 则不会传入 ["require", "exports", "module"] 作为参数:
define(function(){
// factory
arguments.length === 0; // true
});
然而, 如果工厂方法的长度属性小于3, 加载器会选择以函数的长度属性指定的参数个数调用工厂方法:
define(function(require){
// factory
});
define(function(require, exports){
// factory
});
-
全体模式
define("newModuleId", ["module1", "module2", "moduleN"], function(module1, module2, moduleN){ // Do your asyn define }); -
形参定义混入模式
define("newModuleId", ["require", "module2", "exports"], function(re, module2, exports){ // Do your asyn define }); -
省略 define id
define([module1, module2, moduleN], function(module1, module2, moduleN){ // Do your asyn define }); -
省略 dependencies
define("newModule", function(require, exports, module){ // Do your asyn define }); -
混合 dependencies
define(["moduleA", "require"], function(moduleA, require){ // factory }); -
使用 定义关键字, 作为形参
define(["exports"], function(exports){ // factory }); -
简易 define
define("newModule", {}); -
常用
define(function(require, exports, module){ // factory });
require(dependencies, applyFactory);
-
dependencies 依赖应用模块的数组
-
applyFactory 应用工厂方法
-
一般模式
require(["module1", "module2", "module3"], function(module1, module2, module3){ // 应用工厂方法 }); -
使用两个版本jQuery
require(["jQuery_1.7", "jQuery_1.9"], function($17, $19){ // do code here });
留意以下用法: 必须纯粹地显示使用路径, 不得带有参数, 表达式! 这是使用此用法的限制!
require(function(require){
var
$17 = require("jQuery_1.7"),
$14 = require("jQuery_1.9")
;
});
配置 dances.amd
require.conf("baseUrl": "");
require.conf("paths": {
moduleName: "moduleSrc"
});
require.conf("timeout": millisecond);
require.conf("shim": {
moduleName: {
deps: [],
exports: "string" || function(){},
path: ""
}
});
require.conf({
confName: confValue,
confNameN: confValueN
});