關於dojo模塊化引入包的問題


關於dojo模塊化引入包的問題

Dojo引擎一碰到require函數,就會把相應的javascript文件載入。但是如果本地資源和在線資源同時存在,就會出現問題。在編程過程中就遇到了這個問題,下面就記錄下出現的問題以及解決過程。

 

文件結構如圖,index.htmlhtml內容,樣式設計在index.css中,加載地圖在map.js中,zhaomapPage.js是寫好的程序,measure.js是參考書提供的造好的輪子,js1.js是用來測試的。其他請忽略。

在第一次運行的時候,發現zhaomapPage.js根本就解析不完,去掉對measure的載入("myApp/measure")后,發現就能解析完了。因為zhaomapPage.js里面代碼太多,所以只把載入包部分代碼復制到js1.js里面,只探究載入包的相關問題。

 

剛開始這個包是載不進來的,會出現這樣一個錯誤:

 

這是系統把這個包當成網絡資源了。

一開始不知道從哪里下手,因為原來的項目大體框架都有了,文件之間的結構也是寫好的,我只需要把包放到合適的文件夾下再引入就行了。

但是現在不是了。我決定自己研究下是什么問題。

Dojo的官方文檔里肯定有相關的參考,果然,在AMD API里找到了相關的內容。

 

AMD API是優先載入的API並且由兩個全局函數揭露:requiredefine。這兩個函數都是異步的。然而,當在傳統的的加載API的模式中運行時,它們會同步運行,以保證AMD模型可以被遺留代碼訪問到。

這翻譯也是醉了,我理解的就是當網頁內容多了的時候,需要加載的包就多了,如果把包直接用<script src=””>這樣加載的話,那每次頁面載入都要加載所有的包,這樣就會導致運行慢。而AMD模型可以讓包先在那里放着,我們這個功能需要哪些包,就把它require進來,在程序需要的包很多的情況下,就可以大大減少資源的浪費。

“AMD規范就是其中比較著名一個,全稱是Asynchronous Module Definition,即異步模塊加載機制。”——百度百科

其實dojo官網也說了怎么設置了,就是在這個dojoConfig里面設置一個baseURL,然后下面告訴程序包的名字,包的位置。

 

webgis從基礎到開發實踐2-4中有個例子,也講了這個問題,其內容和dojo文檔差不多。但是書上截圖了文件目錄的結構,看起來更直觀一些。

可是我這樣寫了之后

 

卻出現了另一個問題

 

看這意思就是說,又有一個init.js找不到了。

於是我查了查這個包,主要內容是在把dojo包下載到本地之后,需要配置一下Init.js。那大體猜到了,雖然measure找到了,程序卻不知道加載網絡資源了。這時候有倆選擇,繼續找怎么加載measure,或者把dojo下載到本地。我想了想,就算把dojo下載到本地解決問題,我也不能把這個問題放着不管吧,要么只能加載在線資源,要么只能加載本地資源,這很蠢。

我又想到最開始的程序,就是書上的例子。我一開始之所以沒用它,一來我不理解這個,不知道對應到我的程序怎么寫,二來不能老是照着葫蘆畫瓢,就算成功了,這個問題還是沒搞明白,感覺像是留了隱患。

可是現在再回頭看懂了些,書上的dojoConfig是這樣寫的。

 

 

當然+”后面那個路徑和我的不一樣,剛開始我就是沒搞明白這個路徑怎么寫。

這樣程序就能正常運行了,后來我又試了試不加那個replace方法,也就是注釋掉的location配置,嘿,也能運行,暫時還沒搞懂怎么回事。其實不需要寫baseUrl,應該是在完全使用本地的包的時候建立一個基本的空間,下面的包都放在這里面,以簡化工作。以及之所以書上2-4的例子能運行我的卻不能運行,是因為書上的只加載了本地的包,我的同時加載了網絡和本地的。

回頭再查一查這個replace方法,是一個javascript方法,把逗號前的換成逗號后面的,這里也就是把前面那一大串給刪掉了。具體在程序中什么意思,還有待探究。

以及,有時間把在線資源替換成本地資源試試。


免責聲明!

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



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