模塊加載系統的目的是在JS引入依賴管理,模塊,include等機制。
聽說有人不用,就寫個簡單的教程吧。
先把mass.js下載回來。
然后建立一個HTML頁面,index.html,內容為
<!DOCTYPE HTML>
<html>
<head>
<title>AMD</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="mass.js">
</script>
<script>
$.log("測試是否加載成功")
</script>
</head>
<body>
<h2>歡迎加入mass Framework團隊!</h2>
</body>
</html>
這樣index.html就能正確引用mass.js
我們再用firefox中打開此頁面,在firebug下就把看到日志打印,說明加載成功!
然后我們建立一個新JS文件,放到同一目錄,叫hello.js。那理所當然,這模塊名為hello,當然你可以改別的,最好文件名與模塊名一致。
define("hello", function(){
var helloMass = function(){
alert("hello mass!")
}
var helloAMD = function(){
alert("hello AMD!")
}
var helloWorld = function(){
alert("hello world!")
}
return {
helloMass: helloMass,
helloAMD: helloAMD,
helloWorld: helloWorld
}
});
然后我們修改index.html
<!DOCTYPE HTML>
<html>
<head>
<title>AMD</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="mass.js">
</script>
<script>
$.require("./hello", function(obj){
obj.helloWorld();
obj.helloAMD()
obj.helloMass()
})
</script>
</head>
<body>
<h2>歡迎加入mass Framework團隊!</h2>
</body>
</html>
然后你再用IE,FF或chrome打開,就會看到彈出三個alert了。
這里稍微說一下怎么調用模塊吧。require有兩個參數,第一個是字符串,表示要調用的模塊,第二個是回調函數。比如我要調用aaa.js文件,而aaa.js與mass.js是位於同一目錄下,那么這樣調用。
$.require("./aaa", function(){
});
當然你也可以,".js"后綴不是必需的。
$.require("./aaa.js", function(){
});
"./"表示在當前目錄查找。
如果我要依賴兩個模塊,aaa.js, bbb.js,並且它們都與mass.js在同一目錄下吧。
$.require("./aaa,./bbb", function(a, b){
alert(a+b)//3
});
aaa.js,bbb.js的內容很簡單
//aaa.js
define("aaa", function(){
return 1
});
//bbb.js
define("bbb", function(){
return 1
});
於是頁面改成這樣:
<!DOCTYPE HTML>
<html>
<head>
<title>AMD</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="mass.js">
</script>
<script>
$.require("./aaa,./bbb", function(a,b){
alert(a+b)
})
</script>
</head>
<body>
<h2>歡迎加入mass Framework團隊!</h2>
</body>
</html>
好了,我們再看一下模塊間的依賴。每個模塊應該自行處理依賴。現在有一個ccc.js,它與mass.js也位於同一目錄下,它依賴於上面的aaa.js.
//ccc.js
define("ccc",["./aaa"], function(a){// ./表示aaa與ccc是同一目錄
return a + 10
});
那么我們在頁面調用ccc模塊時,就不用於是會aaa.js,它自行會加載aaa模塊的.
<!DOCTYPE HTML>
<html>
<head>
<title>AMD</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="mass.js">
</script>
<script>
$.require("./ccc", function(c){
alert(c)
})
</script>
</head>
<body>
<h2>歡迎加入mass Framework團隊!</h2>
</body>
</html>
好了,我們再看一下引用其他目錄的js文件是怎么用的。在mass.js的目錄下建立一個ddd文件夾,然后里面再建立一個ddd.js文件,ddd模塊依賴於ccc模塊。
//ddd.js
define("ddd",["../ccc"], function(c){// ../表示在上一級目錄中查找,會點編程的人都懂吧。很普通的常識,不需要學太多東西。
return c+100
});
然后我在頁面上這樣引用它們。
<!DOCTYPE HTML>
<html>
<head>
<title>AMD>/title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="mass.js">
</script>
<script>
$.require("./ddd/ddd", function(d){//在當前目錄中ddd目錄找ddd文件
alert(d)
})
</script>
</head>
<body>
<h2>歡迎加入mass Framework團隊!>/h2>
</body>
</html>
我們再來看遠程文件的調用,肯定所有資源不是放在同一服務器上。比如我有一個模塊是放在http://files.cnblogs.com/rubylouvre/20120830__amd.js中
里面的內容為
//20120830_amd.js
define("remote",function(){
return {
name:"這是一個遠程文件",
address:"位於cnblog的服務器上"
}
})
然后調用時就直接輸入這個URL
<!DOCTYPE HTML>
<html>
<head>
<title>AMD</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="mass.js">
</script>
<script>
$.require("http://files.cnblogs.com/rubylouvre/20120830__amd.js", function(obj){
alert(obj.address)
})
</script>
</head>
<body>
<h2>歡迎加入mass Framework團隊!</h2>
</body>
</html>
全文完,如果你想了解一下怎么加載jQuery,可以看一下老外的文章,畢竟AMD現范在國外很普及了,可以搜到的。或者等我下一篇教程。
