( 五 ).Prototype ( 1.5 rc2) 使用指南之 array.js
$A = Array.from(iterable): 將 iterable 轉化為數組,如果 iterable 定義了 toArray 方法,就調用這個方法,否則利用 iterable 的 length 屬性進行枚舉 , 如果 iterable 沒有 length 屬性的話就返回空數組 []
Array 對象除了擴展 Enumerable 對象的方法外,另外擴展了如下的幾個方法,
注意以下方法除了 clear 外都不改變原來數組,而是返回一個新數組:
clear(): 清除數組,利用 arr.length=0
first(): 返回第一個元素
last() :返回最后一個元素
compact(): 去除數組中值為 null 或 undefined 的元素
flatten(): 將數組扁平化,例如 [3,4,[6,7]] 變為 [3,4,6,7]
without(): 去除指定的元素 , 可以指定多個值 , 例如 [4,56,7,8].without(4,7) 返回 [56 , 8]
indexOf(object): 返回指定的元素在數組中的索引,不包含則返回 -1
reverse(inline) : Array 內置函數 reverse 的增強,當 inline 為 true 時,跟內置的 reverse 函數效果一樣,改變原數組的值,否則不改變原來的值
reduce(): 如果數組只有一個元素,則返回這個元素,否則返回數組本身
uniq(): 返回沒有重復元素的數組
clone(): 返回一個跟數組相同的數組, Array 中的 toArray 方法覆蓋了 Enumerable 中的 toArray 方法,指向了這個方法
inspect(): 跟數組的 toString 方法類似,返回對象的字符串表示,例如 [2,3].inspect() 返回 "[2,3]"
( 六 ).Prototype ( 1.5 rc2) 使用指南之 hash.js
Hash 對象 ( 關聯數組 ) 是 Prototype 新建的一個對象,要創建一個 Hash 對象可以調用 $H(object) 方法,使用這個方法將生成一個基于 object 對象的 Hash 對象,生成的 Hash 對象將 object 的屬性名作為 key ,將 object 的屬性值最為鍵值,因為 javascript 本身的特點 ( 對象本身就是關聯數組 ) ,所以實現 Hash 也很簡單, Prototype 中的 Hash 只是 javascript 的關聯數組 ( 對象 ) 而已
Prototype 中的 Hash 對象繼承自 Enumerable 對象,所以也具有 Enumerable 對象的所有屬性和方法,另外它具有以下的方法:
keys(): 返回 hash 的鍵值數組
values(): 返回值得數組
merge(hash): 合并兩個 hash
toQueryString(): 跟 string 的 toQueryParams 方法想法,將 hash 轉化為一個 querystring, 會調用 encodeURIComponent 對鍵和值進行編碼
inspect(): hash 的字符串表示
因為 hash 只是 javascript 的一個普通的對象而已,所以添加一個鍵值對使用: hash[key]=value 就可以了,刪除一個鍵值對使用 detele hash[key] 就可以了
( 七 ).Prototype ( 1.5 rc2) 使用指南之 range.js
Range 對象是一個繼承自 Enumerable 的 " 范圍 " 對象,你可以把它看成 [x,x+1,x+2,x+3 …… x+n] 的數組看待,但是比這樣的數組更節省存儲空間,因為 range 對象只是保存 x 和 x+n 而已
要創建一個 Range 對象調用 $R(start, end, exclusive) 函數就可以了, exclusive 指定是否包含 end 本身,如果沒有指定或為 false 則包含 end ,否則不包含 , 你可以利用 Enumerable 中定義的方法來操作 range 對象, range 對象只是實現了 Enumerable 對象需要的枚舉邏輯 _each 和覆蓋了 include 方法而已
( 八 ).Prototype ( 1.5 rc2) 使用指南之 ajax
Prototype 中的 ajax.js 提供了一個非常好用的 ajax 框架,一般應用中簡單的調用以下代碼就可以了
new Ajax.Request(
??? url, {method: “get”,
??? onSuccess: showFilter,
??? onFailure: function(request){alert(”Server error!”)},
??? onException: showError}
? );
這個框架中提供了如下的對象和方法等:
Ajax 對象:
只有一個 getTransport 方法,返回一個 XMLHttpRequest 對象,另外有一個 activeRequestCount 屬性,反映當前正在處理的 ajax 數量
Ajax.Responders 對象:
繼承自 Enumerable ,管理全局 Ajax 的請求,具有如下方法
register(responder) :注冊一個管理 ajax 請求的對象
unregister(responder) :撤銷一個管理 ajax 請求的對象
dispatch(callback, request, transport, json) :觸發注冊的處理對象的方法
這個對象一般很少使用,系統中已經使用如下的代碼注冊了一個處理對象
Ajax.Responders.register({
? onCreate: function() {
??? Ajax.activeRequestCount++;
? },
? onComplete: function() {
??? Ajax.activeRequestCount–;
? }
});
Ajax.Base 類:
Ajax 的基類 , 只有一個方法 setOptions(options), 默認 request 參數如下,你可以在新建 Ajax.request 時指定:
method:?????? 'post’,
asynchronous: true,
contentType:? 'application/x-www-form-urlencoded’,
encoding:???? ' UTF-8 ′ ,
Ajax.Request 類:
ajax 主要的類,繼承自 ajax.base 類,客戶端使用 new Ajax.Request(url,options) 調用, options 是一個對象 ( 關聯數組 ), 在 options 中可以指定 method , asynchronous , contentType , encoding , parameters , postBody , username,password 等選項,其中 parameters 可以是字符傳或者關聯數組象,
另外在 options 中還可以通過 requestHeaders 指定 request heads ,其中 requestHeaders 可以是數組 ( 例如 [ ” Connection ” , ” Close ” , ” aheadkey ” , ” aheadvalue ” ]) 或一個關聯數組;
options 中最重要的選項就是指定 ajax 的回調方法,可以定義 onComplete, onSuccess, onFailure, onException( 執行過程中發生異常調用的方法,主要為 onComplete, onSuccess, onFailure 等回調方法產生的 ) ,甚至可以定義 on404,on503 這樣的回調方法,它們的參數為 (transport, json), 其中 transport 為請求的 XMLHttpRequest 對象 , json 是 evalJSON 的結果
如果返回的是一個 javascript 文件 ( 根據返回的 Content-type 頭判斷 ) 將會執行 evalResponse 方法,另外 Ajax.Request 對象還有一個 evalJSON 方法,取得文件的時候就會執行
這個對象的方法列表如下:
request(url) : 發送請求, new 的時候就已經調用了,所以一般不需要使用
success(): 判斷 request 是否成功了
getHeader(name) :根據 name 得到 request head
evalJSON(): 執行 getHeader( ” X-JSON ” ), 并返回結果
evalResponse(): 執行返回的 responseText 并返回
Ajax.Updater 類 :
繼承自 Ajax.Request ,只是比 Ajax.Request 增加了更新 html 元素的功能,一般使用方法是 new Ajax.Updater(element, url, options), element 可以是一個元素,也可以是 {success:e1,failure:e2} 這種形式 ,
默認情況下不會執行返回結果中的 javascript ,如果你先執行,你可以指定 options 中的 evalScripts 為 true
默認情況下是替換指定元素的內容,如果你希望是添加,可以指定 options 的 insertion 參數 , insertion 是一個 Insertion.Before 、 Insertion.Top 或 Insertion.Bottom 、 Insertion.After( 將在 dom.js 中介紹 )
Ajax.PeriodicalUpdater 類 :
繼承自 Ajax.Base ,周期性的更新一個 html 元素的內容,這個類會調用 Ajax.Updater 對 html 元素進行周期性的更新,使用方法為 new Ajax.PeriodicalUpdater(container, url, options), 參數跟 Ajax.Updater 差不多,其中 options 可以設置 frequency( 默認為 2) , decay , decay 指的是當請求的內容沒有變化的時候, frequency 需要延長的倍數,默認是 1 ,例如如果 decay 設為 2 , frequency 設為 3 而內容一直沒有變化,則請求的時間依次會變為 3,6,12,24 等
start(): 開始更新 , 初始化的時候會自動調用
stop(): 停止更新