前幾天看到追求“簡(jiǎn)約不簡(jiǎn)單”的ORM映射框架這篇文章,發(fā)現(xiàn)作者不僅是一個(gè)寫(xiě)程序的高手,還是一個(gè)文學(xué)上的高手,用陳道名來(lái)比喻“簡(jiǎn)約”和“不簡(jiǎn)單”真的是非常貼切。其實(shí)作為程序員,大家在看到一個(gè)讓自己動(dòng)心的東西的時(shí)候,心里就是會(huì)有這樣的感覺(jué)。比如我這里提到的Prototype,一看到它,我就喜歡上了它,覺(jué)得它“簡(jiǎn)約而且簡(jiǎn)單”,就像劉亦菲,不需要什么花哨的表演,只要清麗脫俗的面容就夠了。Prototype可以說(shuō)就是這樣一個(gè)對(duì)AJAX的封裝,我沒(méi)有把它稱(chēng)為框架,就是因?yàn)樗?jiǎn)單。
Prothotype主要包含三個(gè)內(nèi)容:1.提供了一些全局的函數(shù),來(lái)替代原先繁瑣重復(fù)的代碼;2.對(duì)現(xiàn)在的Javascript, Dom等對(duì)象進(jìn)行擴(kuò)展,提供訪問(wèn)公共函數(shù)的捷徑;3.對(duì)Ajax的封裝,使得開(kāi)發(fā)Ajax更容易和快速。
全局性的函數(shù),比較有代表性的是$系列函數(shù)和Try.these()函數(shù)。
$()函數(shù):來(lái)替代document.getElementById()方法。如果傳入多個(gè)ID,則返回一個(gè)Array。
用法:
$F()函數(shù):用以返回表單控件的值,比如:文本框,下拉列表,必須是有value屬性的控件,傳入控件的ID。
用法:
$A()函數(shù):可以接受任何一個(gè)枚舉類(lèi)型轉(zhuǎn)換為一個(gè)數(shù)組。
用法:
$H()函數(shù):將傳入的對(duì)象轉(zhuǎn)換一個(gè)可枚舉的和聯(lián)合數(shù)組類(lèi)似的Hash對(duì)象。
$R()函數(shù):是對(duì) new ObjectRange(lowBound, upperBound, excludeBounds)的縮寫(xiě)和替代。
Try.these()函數(shù):使用一系列函數(shù)作為參數(shù)。返回第一個(gè)成功執(zhí)行函數(shù)的有返回值。這樣就不用if else去判斷了。比如,我們創(chuàng)建XMLHttpRequest對(duì)象的時(shí)候,為了保持瀏覽器兼容,往往需要編寫(xiě)這樣的代碼:
而現(xiàn)在,使用Try.these()函數(shù),這些繁瑣的過(guò)程變得異常簡(jiǎn)單。
Prototype對(duì)Javascript的Object, Number, Function, String, Array, Event等對(duì)象都進(jìn)行了擴(kuò)展,創(chuàng)建了一些新的對(duì)象和類(lèi),并在基礎(chǔ)上有很多公用函數(shù),比如each(), any(), collect()等。
each()可以讓我們項(xiàng)在Ruby、.net語(yǔ)言那樣遍歷集合中的元素。該方法使用iterator依次獲取集合中的每個(gè)元素,并將其作為匿名函數(shù)的參數(shù);也可以在該匿名函數(shù)中加上可選參數(shù)index,獲取當(dāng)前元素的索引值。下面的例子使用each()方法,對(duì)一個(gè)保存貨物價(jià)格的數(shù)組進(jìn)行遍歷,顯示其價(jià)格及其索引值:
除此之外,Prototype還對(duì)Ajax提供的支持,主要由Ajax.Request和Ajax.Updater兩個(gè)來(lái)完成。使用這兩個(gè)類(lèi),可以應(yīng)付大部分的AJAX應(yīng)用,而且不需要繁瑣的實(shí)例化XHR、監(jiān)控請(qǐng)求狀態(tài)的過(guò)程。
假設(shè)我們將書(shū)籍信息保存在一個(gè)XML文檔內(nèi),如下:
現(xiàn)在,我們使用Ajax.Request類(lèi)去獲取這個(gè)XML文檔的內(nèi)容,并將其顯示出來(lái),如下:
method為方法類(lèi)型,如get,post等;onComplete為回調(diào)函數(shù),通常在這個(gè)函數(shù)中完成對(duì)相應(yīng)數(shù)據(jù)的解析和顯示。如果服務(wù)器返回的是已經(jīng)格式化的HTML代碼,則可以使用Ajax.Updater。下面的例子,使用Ajax.Updater將服務(wù)器的響應(yīng)數(shù)據(jù)填充道指定的div中:
"divContent"為要將返回內(nèi)容插其中的控件ID。
參考資料:柯自聰 《Prototype的開(kāi)發(fā)與應(yīng)用實(shí)踐》 (程序員第11期)
聯(lián)系客服