由於最近想學學ArcGIS API for JavaScript ,翻了下ESRI的官網guide,發現其是基於dojo框架的,看了兩頁實在看不懂,因而先來熟悉下dojo框架。人蠢不能怪社會%>_<%,可能只是別人入門時甚至沒當回事的問題,在我這硬是弄了很久才弄明白,就是dojo configuration中的package路徑問題。javascript
假設個人文件目錄結構以下:html
/ index.html dojo-release-1.10.4 /dojo /dojo.js /dojox /dijit mytest /myModule.js
當我須要在loader裏load自定義的myModule該怎麼作?java
經實測,這樣寫是能夠的:框架
<script type="text/javascript"> var dojoConfig={ baseUrl:"", tlmSiblingOfDojo: false, packages:[ {"name":"dojo","location":'dojo-release-1.10.4/dojo'}, {"name":"mytest","location":"mytest",main:"myModule"}, ] }; </script> <script data-dojo-config="async: true" src="dojo-release-1.10.4/dojo/dojo.js"></script> <script type="text/javascript"> require( ['mytest/myModule'],function(myModule){ //do something with myModule }) </script>
需說明:async
1.dojoConfig 必須set在加載dojo.js以前,不然在控制檯調試時會發現報錯。ide
2.baseUrl是什麼?
默認值是dojo.js所在文件夾的路徑,此例中即dojo-release-1.10.4/
全部的package路徑都是相對於baseUrl,例如:若是我這樣設置baseUrl:"/myfolder/",那麼當我加載模塊「mytest/myModule」,loader將會從下面路徑去加載:ui
/myfolder/mytest/myModule.js
3.tlmSiblingOfDojo是什麼?
默認值是true,此時loader將從dojo.js所在文件夾的同級文件夾中加載模塊調試
4.packages
一個array,包含多個module及每一個module對應的features。code
※ name:the name of the package. 即包含了自定義module js文件的文件夾名,如此例中的「my」。htm
※ location:the location of the package. 能夠是基於baseUrl的相對路徑也能夠是絕對路徑。 採起相對路徑時,當我require「mytest/myModule」, loader將從形以下面的路徑加載module: baseUrl+mytest的location+」/myModule.js ※ main:默認值是main.js。用於require package自己時告訴loader該去加載什麼文件。例如,當我require 「mytest」而不是「mytest/myModule」時,loader依然知道去load myModule.js。 另外一種狀況,當直接require一個沒有在packages裏define過的package時,如「anotherTest」時,loader將會嘗試去加載下面的文件: baseUrl+anotherTest.js