2015年9月29日 星期二

dojo Template

dojo Tamplate

環境

  • CSS3
  • HTML5
  • ECMA5 Javascript
  • dojo Toolkit 1.10
  • Chrome 43.0

基本模版

1 <!DOCTYPE html>
2 <html lang="zh-Hant-TW">
3 <head>
4 <title>dojo Configuration</title>
5 <meta charset="utf-8" />
6 <link rel="stylesheet" href="js/libs/dijit/themes/claro/claro.css">
7 <script>
8     dojoConfig={
9         async:true,
10         parseOnLoad:false,
11         baseUrl:"js/",
12         packages:[
13            {name:"dojo", location:"libs/dojo"},
14             {name:"dijit", location:"libs/dijit"},
15             {name:"dojox", location:"libs/dojox"},
16             {name:"utils", location:"app/utils"}
17         ]
18     }
19 </script>
20 <script src="https:js/libs/dojo/dojo.js"></script>
21 <head>
22 <body class="claro">
23 // Put HTML and dojo declarative code here
24 </body>
25 <script>
26 var app={};
27 require([
28     "dojo/parser",
29     "dojo/ready"
30     ],
31 function(
32     parser,
33     ready
34 ){
35     parser.parse();
36     ready(1, function(){
37     // 所有用到任何 dijit 的程式碼,都要放在這個函式裡面
38     // 否則在調用 dijit 時,很可能 dijit 當時尚未建立,因而得到 null 值
39     });
40 });
41 </script>
42 <html>

第 6 行載入所要使用的主題樣式,範例裡用的是 claro 主題樣式。
第 9 行的 async:true 設定使用 AMD (Asynchronous Module Definition) 模式。
第 11 行 baseUrl 的值是包含此段程式碼的 HTML 頁面到存放 dojo 套件的基本相對路。換句話說,baseUrl + location 即是 name 套件對 HTML 的完整相對路徑 。例如: dojo 這個套件的相對位置即為 js/libs/dojo ;而 utils 套件的相對路徑即是 js/app/utils。其餘套件的相對路徑,以此類推。
第 20 行的作用在載入最基本的 dojo 模組。
第 22 行指定 body 的 class 為 claro,用以套用主題樣式。這裡 class 的值一定要給,同時要和第 6 行中載入的主題樣式名稱一致。
第 26 行定義一個名為 app 的全域變數 (global variable),用來掛載未來程式中的變數及函式,在流覽器的主控台 (console) 中,可以用 window.app 這個變數名找到它。
第 27 到 30 行,使用 require() 函式,指定程式中所要使用到的 AMD 模組。parser 會在剖析 HTML 碼時,自行下載在 HTML 碼中宣告的 dijit AMD 模組; 因此,在 require() 函式中,就無須特別指定己宣告的 dijit 模組。
第 30 到 32 行,將至載的 AMD 模組以參數的方式,傳入回呼 (callback) 函式中。要注意的是參數的先後次序和 require() 下載 AMD 模組時所列示的先後次序,兩者必須一致。
第 34 行呼叫剖析器 (parser) 對 HTML 碼進行剖析 (parse),同時根據宣告進行 dijit 的建立。在 dojo 1.8 版後,剖析以非同步進行。因此,有用到在 HTML 碼中宣告建立之 dijit 的程式碼,都要放在 ready() 回呼函式中執行;否則,程式碼在執行時,用到的 dijit 可能還沒有建立完畢,因而造成錯誤。
第 35 行的 ready() 內回呼函式中所包含的程式碼,只會在 HTML 碼剖析完畢,而且所有的 djijt 都建立之後,才會執行。ready() 函式可以多次呼叫,第一個參數的數值決定呼叫的先後次序,數值愈小的愈早執行。

沒有留言:

張貼留言