AMD原理等在這裏就不進行說明了,做者也是菜鳥一枚,只是對本身的一個實例進行說明,若有錯誤,望指出。javascript
首先,先推薦一篇AMD方面的文章,有興趣的能夠參考:http://efe.baidu.com/blog/dissecting-amd-what/css
接下來即是我本身的實例了:html
1.模塊化編程,則須要先有個模塊了,而模塊即是由HTML與js結合成的,在widget目錄下,定義一個待編輯模塊目錄:java
HTML內容以下:jquery
1 <div id="mapType-wrapper" class="${baseClass}" data-dojo-attach-point="mapTypeDom"> 2 <div id="mapType"> 3 <div class="mapTypeCard normal active" data-name="normalMap"> 4 <div class="switch-box"><input type="checkbox" class="switch"> 5 <p>顯示收藏點</p> 6 </div> <span>地圖</span></div> 7 <div class="mapTypeCard satellite" data-name="satellite"> 8 <div class="switch-box"><input type="checkbox" class="switch" checked="true"> 9 <p>開啓路網</p> 10 </div> <span>衛星</span></div> 11 <div class="mapTypeCard panorama choosedType" data-name="panorama"> <span>全景</span></div> 12 </div> 13 </div>
data-dojo-attach-point="mapTypeDom"爲該標籤指定實踐時使用。
接下來是js中的內容,使用dojo/text!將js與html結合,並加載樣式(css)和添加鼠標移入移除事件:
1 /** 2 * Created by lenovo on 2016/12/18. 3 */ 4 5 define([ 6 "dojo/_base/declare", 7 "dojo/text!/scada/app/widget/viewchoose/templates/viewchoose.html", 8 "dijit/_WidgetBase", 9 "dojo/dom", 10 "dojo/on", 11 "dijit/_TemplatedMixin", 12 13 14 ], function (declare, template, _WidgetBase, dom, on, _TemplatedMixin) { 15 16 return declare([_WidgetBase, _TemplatedMixin], { 17 18 templateString: template,// 設置模板頁 19 baseClass: "viewchoose",// 基礎樣式名稱 20 21 /** 22 * 控件銷燬時的處理。 23 */ 24 uninitialize: function () { 25 26 }, 27 28 /** 29 * 控件在渲染到頁面上顯示時的處理。 30 */ 31 startup: function () { 32 33 }, 34 35 /** 36 * 控件加載到頁面DOM上,瀏覽器渲染顯示以前的處理。 37 */ 38 postCreate: function () { 39 alert("1"); 40 this._initRes();// 初始化資源 41 this._initEvent();// 初始化內部事件 42 43 44 45 }, 46 47 /** 48 * 初始化本控件內部的事件處理。 49 * 50 * @private 51 */ 52 _initEvent: function () { 53 this.initEvent(); 54 }, 55 56 57 /** 58 * 初始化本控件內部的資源(樣式、腳本、數據等)。 59 * 60 * @private 61 */ 62 _initRes: function () { 63 //加載樣式 64 dynamicLoad.resource([require.toUrl("/scada/app/widget/viewchoose/css/viewchoose.css")]); 65 }, 66 initEvent: function () { 67 this.own( 68 on(this.mapTypeDom, "mouseover", function () { 69 // $('#dijit__TemplatedMixin_0').removeClass('viewchoose'); 70 $('.viewchoose').addClass('expand'); 71 }), 72 on(this.mapTypeDom, "mouseout", function () { 73 $('.expand').removeClass('expand'); 74 }) 75 ); 76 }, 77 78 }); 79 });
js中均有註釋,就不在作說明。web
2.接下來即是如何引用該模塊。編程
建立測試的HTML,以及js:瀏覽器
test.html中,需引入jquery、dojo相關包,以及test.jsapp
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" 6 content="width=device-width,initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> 7 <meta name="format-detection" content="telephone=no"> 8 <meta name="screen-orientation" content="portrait"> 9 <meta name="x5-orientation" content="portrait"> 10 <title>測試AMD</title> 11 <script type="text/javascript" src="../js/jquery.min.js"></script> 12 <script type="text/javascript" src="../js/fastclick.js"></script> 13 <script type="text/javascript" src="../js/resize.js"></script> 14 15 <script type="text/javascript" src="../../conf/config.js"></script> 16 <script type="text/javascript" src="../../lib/framework/core.js"></script> 17 18 </head> 19 <body> 20 <div id="testamd"></div> 21 22 <script type="text/javascript"> 23 $("html,body").addClass("full-body"); 24 // 加載須要導入的腳本和樣式 25 dynamicLoad.resource([ 26 baseConfig.resRoot + "/library/3.17/3.17/dijit/themes/tundra/tundra.css", 27 baseConfig.resRoot + "/library/3.17/3.17/dojo/dojo.js", 28 baseConfig.webRoot + "/app/widget/test.js" 29 ], true, function () { 30 }); 31 32 </script> 33 </body> 34 </html>
test.js中引入模塊化的對象,放入需使用的地方:dom
1 /** 2 * Created by lenovo on 2016/12/21. 3 */ 4 5 require([ 6 "viewchoose/ViewChooseWidget.js","dojo/dom","dojo/domReady!" 7 8 ],function (widget,dom) { 9 var viewchooseObj = new widget(); 10 var contDom = dom.byId('testamd'); 11 12 viewchooseObj.placeAt(contDom); 13 })
以上。