【原創】(AMD)JavaScript模塊化開發(dojo)

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 })

 

以上。

相關文章
相關標籤/搜索