七、 使用觀(guān)察器
Rails能夠讓你監視一個(gè)字段的值,并且在無(wú)論何時(shí)字段值發(fā)生變化時(shí),都作一次到一個(gè)行動(dòng)處理器的Ajax調用。當前被觀(guān)察字段的值被發(fā)送到本次調用相關(guān)的寄送數據的行動(dòng)處理器中。
最常用的一種情況是實(shí)現一個(gè)實(shí)況查找:
<label for="searchtext">Live Search:</label> <%= text_field_tag :searchtext %> <%= observe_field(:searchtext, :frequency => 0.25, :update => :search_hits, :url => { :action => :live_search }) %> <p>Search Results:</p> <div id="search_hits"></div> |
這個(gè)代碼小片段實(shí)現監視一個(gè)稱(chēng)為searchtext的文本框字段的值。每隔四分之一秒,Rails檢查該字段的變化。如果該字段發(fā)生變化,瀏覽器將作一個(gè)到live_search行動(dòng)處理器的Ajax調用,并把結果顯示在search_hits div中。
你可以在我的博客上看到一個(gè)這種現場(chǎng)查找的實(shí)際展示。在右上角的搜索框中,你可以試著(zhù)輸入"enterprise"或"rails",看看發(fā)生了什么。
八、 是否應用Ajax技術(shù) 當你使用Ajax技術(shù)來(lái)更新一個(gè)web頁(yè)面部分時(shí),用戶(hù)得到的是快速響應性和流暢性。然而,用戶(hù)也失去了書(shū)簽功能和使用瀏覽器的向后按鈕的能力。這兩個(gè)缺點(diǎn)來(lái)源于同一個(gè)事實(shí):URL不做改變,因為瀏覽器并沒(méi)有裝載一新的頁(yè)面。
不要僅因為Ajax相當酷而使用它,而應考慮在你的web應用程序的用戶(hù)接口中什么最為重要。
例如,如果一個(gè)web頁(yè)面顯示一個(gè)帳戶(hù)列表-上面有一些諸如添加、刪除和改名帳戶(hù)等等的操作,這些都是Ajax的良好候選。如果用戶(hù)點(diǎn)擊一個(gè)超級鏈接來(lái)顯示屬于一個(gè)帳戶(hù)的所有清單-這種情況下,你應該顯示一新頁(yè)面并且避免Ajax。
這意味著(zhù)用戶(hù)能夠記下該帳戶(hù)頁(yè)面和清單頁(yè)面,并且使用向后和向前按鈕在它們之間切換。用戶(hù)不能夠記下所有這些列表之一中的操作或使用向后按鈕來(lái)嘗試撤消一個(gè)在該列表上的操作(在一傳統型web應用程序中,這兩者你也都希望避免發(fā)生)。
九、 添頭 我想介紹給你許多真正酷的東西,但是卻不會(huì )深入到細節中去討論。
Web頁(yè)面上載文件的功能經(jīng)常令一些用戶(hù)緊皺眉頭,因為用戶(hù)在上載處理過(guò)程中,他不會(huì )收到任何反饋信息,除了屏幕上漏斗鼠標在不停地轉轉轉……通過(guò)使用Ajax技術(shù),你可以與服務(wù)器進(jìn)行通訊-在上傳過(guò)程中,可以檢索和顯示上傳的狀態(tài)。Sean Treadway和Thomas Fuchs實(shí)現了一個(gè)有關(guān)如何實(shí)現這種技術(shù)的現場(chǎng)展示,這是通過(guò)使用Rails和一個(gè)視頻來(lái)實(shí)現的。
另外,Rails使用的Prototype JavaScript庫也實(shí)現了大量的可視化效果。效果演示頁(yè)面上有一個(gè)這些效果的在線(xiàn)演示,其中包括JavaScript對使用之的調用。
十、 感想 自從孤立的web站點(diǎn)服務(wù)于靜態(tài)的頁(yè)面以來(lái),Web已經(jīng)經(jīng)歷了一段相當長(cháng)的里程。如今,我們在慢慢地進(jìn)入到一個(gè)新的時(shí)代-站點(diǎn)動(dòng)態(tài)地相互鏈接在一起,web API允許我們容易地在已有的服務(wù)上進(jìn)行這樣的創(chuàng )建,而且web用戶(hù)接口已變得越來(lái)越流暢和具有快速響應性。很明顯,Ajax在如今已浮出水面的Web 2.0傳奇中將占有舉足輕重的地位。
無(wú)論如何,把復雜的Ajax特征增加到一個(gè)web應用程序應該是一堆相當大量的工作,但是Rails使得所有這些變得太簡(jiǎn)單了。