摘要:
[OpenSource]ScriptLoader: 輕鬆管理你的js 類庫一文發布後,有的園友反映,侵入性還是有點太強。昨天晚上半夜想到一個不錯的點子,越想越睡不著,最終還是爬起來把ScriptLoader升級到了V2,這個版本將給你更便利的指令檔組織體驗,增加了自動關聯、多語言支援途徑、誘人的Syntactic Sugar,使用ScriptLoader將改變你以往的編程習慣^_^。
簡介:
ScriptLoaderV2增加一些新特性:
- 對Aspx無侵入性的指令碼引入機制。
- 多語言資源的支援途徑。
- 讓你更容易load module的Syntactic Sugar。
無侵入的指令碼引入機制:
當前我們的指令碼組織方式,一般是每個aspx都會通過script標籤引入一些js核心類庫,然後在aspx頁面裡面混雜一些當前頁面所需的商務邏輯指令碼。
這樣子的寫法導致js和我們的aspx進行了太緊密的結合,同時也不利於整個項目的維護。針對此,ScriptLoader提供了一個HttpModule來結合進行js的引入。當讀入WebForm1.aspx的時候會自動幫你Load同目錄下的WebForm1.aspx.js檔案,因為是經過ScriptLoader匯入的,所以具備ScriptLoader的特點,比如緩衝,只要你的webForm1.aspx.js最後修改日期沒有變,就可以一直利用用戶端的緩衝。
不過你可能會想到這樣一種情況:
我們經常使用<%=this.TxtName.ClientID%>這種方法來擷取服務端控制項在用戶端的唯一id,那這個情況在外部引入的js是沒辦法使用的,所以我引入了ScriptLoaderV2的第二個特性。
多語言資源的支援途徑:
通過ScriptLoader.SetVariable方法進行賦值。
相關的方法還有
如果你用到了這個特性,那會產生侵入性了,如果你不想產生侵入性,你也可以使用Asp.Net原始的方法:
那這個特性跟多語言又有什麼關係呢?
因為這其中有個方法是讀取xml設定檔直接設定變數的,xml如下:
讀入的代碼:
因此,如果你想對這些變數做根據不同的語言做不同的賦值的話,就可以多寫幾個config,比如myVars-en-US.config,myVars-zh-cn.config,然後根據不同語言版本載入不同的變數,而js中需要做多語言的都用變數代替字元常量。
當然這還有更好的整合方式,就是把頁面組織圖改成如下形式
然後就像第一個特性一樣,自動根據語言版本載入不同js或者config,目前未增加這個特性,因為還沒有辦法考慮到有些什麼特殊情況,所以還不準備增加此特性,不過這個的修改也是很快的,如果你有需要可以自行下載代碼,進行修改,如果能把你的應用情況反饋給我,那自然更好了。時機成熟,我會考慮直接整合進ScriptLoader的代碼。
變數的問題解決了,但是每個商務邏輯的js不可能離開一些核心的js類庫,比如例子中的
我需要在當前頁面引入jquery類庫,那怎麼辦?為瞭解決這個問題,ScriptLoader增加第三個特性。
Syntactic Sugar:
所謂Syntactic Sugar,就是一種取巧的做法,有點像Vs2008中的自動屬性
其實這不是標準的語言庫支援的特性,是Vs2008這個IDE為我們提供的一種便利通道。在ScriptLoader中為瞭解決引入指令碼的問題也加入類似的特性:
可以看到在WebForm2.aspx.js中的頭部,使用了一個叫using的方法,引入了3個在我們lib.config中配置的js module。
這個Syntactic Sugar只能用在WebForm2.aspx.js這中類型的js中,不是所有js類庫都可以使用,ScriptLoader會在為aspx頁面注入ScriptLoader的時候,進行分析,然後自動幫你Load這些模組。核心的類庫還是必須通過lib.config/user.config進行配置的,這樣子你才可以使用using(moduleName)來引入這些指令碼。
後記:
我是標題黨,呵呵,不要批我的標題。
如果你使用ScriptLoader的這些特性,確實可以改善你的很多js檔案組織體驗。現在大部分js類庫更加關心功能的封裝,但是對於js檔案的組織管理甚少關注,ScriptLoader就是為了填補這個空白而出現的。
後續的版本會增加更多讓你心動的特性,比如ClientCacheManager
Examples包含在src發布包中,你也可以通過svn擷取ScriptLoader最近的版本
Http://www.sourceforge.net/projects/scriptloader