RequireJS入門(二)


上一篇是把整個jQuery庫作為一個模塊。這篇來寫一個自己的模塊:選擇器。

為演示方便這里僅實現常用的三種選擇器id,className,attribute。RequireJS使用define來定義模塊。

 

新建目錄結構如下

這次新建了一個子目錄js,把main.js和selctor.js放入其中,require.js仍然和index.html在同一級目錄。

 

HTML 如下

<!doctype html>
<html>
	<head>
		<title>requirejs入門(二)</title>
		<meta charset="utf-8">
		<style type="text/css">
			.wrapper {
				width: 200px;
				height: 200px;
				background: gray;
			}
		</style>
 	</head>
 	<body>
		<div class="wrapper"></div>
		<script data-main="js/main" src="require.js"></script>
 	</body>
</html>

  

這次把script標簽放到了div的后面,因為要用選擇器去獲取頁面dom元素,而這要等到dom ready后。

因為把main.js放到js目錄中,這里data-main的值須改為“js/main”。

 

selector.js 如下

define(function() {

	function query(selector,context) {
		var s = selector,
			doc = document,
			regId = /^#[\w\-]+/,
			regCls = /^([\w\-]+)?\.([\w\-]+)/,
			regTag = /^([\w\*]+)$/,
			regNodeAttr = /^([\w\-]+)?\[([\w]+)(=(\w+))?\]/;
		
		var context = 
				context == undefined ?
				document :
				typeof context == 'string' ?
				doc.getElementById(context.substr(1,context.length)) :
				context;
				
		if(regId.test(s)) {
			return doc.getElementById(s.substr(1,s.length));
		}
		// 略...
	}
	
	return query;
});

 

define的參數為一個匿名函數,該匿名函數執行后返回query,query為函數類型。query就是選擇器的實現函數。

 

main.js 如下

require.config({
	baseUrl: 'js'
});

require(['selector'], function(query) {
	var els = query('.wrapper');
	console.log(els)
});

  

require.config方法執行配置了baseUrl為“js”,baseUrl指的模塊文件的根目錄,可以是絕對路徑或相對路徑。這里用的是相對路徑。相對路徑指引入require.js的頁面為參考點,這里是index.html。

 

把目錄r2放到apache或其它web服務器上,訪問index.html。

 

網絡請求如下

 

main.js和selector.js都請求下來了。

selector.js下載后使用query獲取頁面class為“.wrapper”的元素,控制台輸出了該元素。如下

 

總結:

  1. 使用baseUrl來配置模塊根目錄,baseUrl可以是絕對路徑也可以是相對路徑
  2. 使用define定義一個函數類型模塊,RequireJS的模塊可以是JS對象,函數或其它任何類型(CommonJS/SeaJS則只能是JS對象)

 

感興趣的請繼續閱讀 下一篇

 

r2.zip


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM