国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
跨越邊界: Ajax on Rails

2006 年 12 月 26 日

對(duì) Ajax 這種使 Web 頁(yè)面更具交互性的技術(shù)的大肆宣傳已成過(guò)度之勢(shì)。Ruby on Rails 框架和 Ajax 的完美集成所產(chǎn)生的力量在一定程度上促成了該框架的繁榮。本文旨在揭示:是什么使 Ajax on Rails 成為如此強(qiáng)大的組合。

跨越邊界 系列之前的兩篇文章(參見 參考資料)全面介紹了 Streamlined,這是 Rails 的輔助框架,該框架有效地利用 scaffolding 來(lái)快速生成簡(jiǎn)單的、使用 Ajax 的用戶界面。除非您一直與世隔絕,不然您一定會(huì)知道 Ajax 是這樣一種編程技術(shù),它使用 XML、JavaScript 和 Web 標(biāo)準(zhǔn)來(lái)創(chuàng)建高度交互性的 Web 頁(yè)面,正如您在 Google Maps 和大量其他站點(diǎn)上所看到的頁(yè)面那樣。許多讀過(guò) Streamlined 文章的讀者都要求我描述一下 Ajax 在 Ruby on Rails 上的運(yùn)行方式。本文全面介紹了兩個(gè)簡(jiǎn)單的 Ajax 例子,延著這個(gè)思路介紹了 Ruby/Ajax 這一組合如此成功的原因。在本系列的下篇文章中,我將探究 JavaScript 這門編程語(yǔ)言。

Ajax 定義

Ajax 代表 Asynchronous JavaScript + XML。信息架構(gòu)師 Jesse James Garrett 于 2005 年提出這一術(shù)語(yǔ),該術(shù)語(yǔ)用來(lái)描述一門在夾縫中生存了近二十年的技術(shù)(參見 參考資料)。Ajax 的使用隨即爆增,不論在圖書館、流行網(wǎng)站還是文獻(xiàn)作品中都保持同步增長(zhǎng)。

Ajax 重新定義了基本的瀏覽器使用模型。原模型一次呈現(xiàn)一個(gè)頁(yè)面。Ajax 允許瀏覽器在頁(yè)面更新的間隔同服務(wù)器進(jìn)行交流。這樣做的好處是帶來(lái)更加豐富的客戶體驗(yàn),但卻以增加復(fù)雜度為代價(jià)。Ajax 是這樣運(yùn)行的:使用 JavaScript 客戶端庫(kù)在客戶機(jī)和服務(wù)器間發(fā)送 XML。Ajax 開發(fā)人員可以在任何時(shí)刻從客戶機(jī)發(fā)送異步請(qǐng)求,因而在服務(wù)器處理這些請(qǐng)求時(shí),用戶交互可以繼續(xù)進(jìn)行。下面就是 Ajax 請(qǐng)求的流程:

關(guān)于本系列

跨越邊界系列 文章中,作者 Bruce Tate 提出這樣一種觀點(diǎn),即當(dāng)今的 Java 程序員們可以通過(guò)學(xué)習(xí)其他方法和語(yǔ)言很好地武裝自己。自從 Java 技術(shù)明顯成為所有開發(fā)項(xiàng)目最好的選擇以來(lái),編程前景已經(jīng)發(fā)生了改變。其他框架影響著 Java 框架的構(gòu)建方式,從其他語(yǔ)言學(xué)到的概念也可以影響 Java 編程。您編寫的 Python(或 Ruby、Smalltalk 等語(yǔ)言)代碼可以改變編寫 Java 代碼的方式。

本系列介紹與 Java 開發(fā)完全不同的編程概念和技術(shù),但是這些概念和技術(shù)也可以直接應(yīng)用于 Java 開發(fā)。在某些情況下,需要集成這些技術(shù)來(lái)利用它們。在其他情況下,可以直接應(yīng)用概念。具體的工具并不重要,重要的是其他語(yǔ)言和框架可以影響 Java 社區(qū)中的開發(fā)人員、框架,甚至是基本方式。

  1. 一個(gè)事件(如用戶的鼠標(biāo)點(diǎn)擊或編程計(jì)時(shí)器的觸發(fā))啟動(dòng)一個(gè) JavaScript 函數(shù)。

  2. JavaScript 函數(shù)為部分頁(yè)面而不是整個(gè)頁(yè)面創(chuàng)建一個(gè)請(qǐng)求。JavaScript 隨后通過(guò) HTTP 將該請(qǐng)求發(fā)送到 Web 服務(wù)器。

  3. 此 HTTP 請(qǐng)求調(diào)用服務(wù)器上的一個(gè)腳本,如 Rails 控制器方法或 Java? servlet。

  4. 該服務(wù)器腳本創(chuàng)建一個(gè) XML 文檔并將其返回給服務(wù)器。

  5. 在接收結(jié)果的同時(shí),客戶機(jī)異步處理創(chuàng)建、更新或刪除部分 Web 頁(yè)面,如列表元素、div 標(biāo)記或圖像。

所有 Ajax 應(yīng)用程序都使用類似這種順序的一種方法。例如,某個(gè)應(yīng)用程序允許將字典中的單詞與其定義一起保存。舊式的應(yīng)用程序會(huì)強(qiáng)迫您用一個(gè)新的頁(yè)面視圖來(lái)編輯定義。Ajax 允許原地編輯,它用一個(gè)條目字段替換定義文本,然后用更新的定義來(lái)替換該表單。

Ajax 解決方案的組件是:

  • 客戶端 JavaScript 庫(kù),用來(lái)管理異步請(qǐng)求。
  • 服務(wù)器端 JavaScript 庫(kù),用來(lái)處理進(jìn)來(lái)的請(qǐng)求,并構(gòu)造一個(gè) XML 響應(yīng)。
  • 客戶端 JavaScript 庫(kù),用來(lái)處理生成的 XML。
  • 稱作文檔對(duì)象模型(DOM)的庫(kù),允許對(duì)現(xiàn)有 Web 頁(yè)面進(jìn)行更新。
  • 輔助例程,用來(lái)處理不可避免的 UI 和集成問題。

事件/請(qǐng)求/響應(yīng)/替換模型是大多數(shù) Ajax 應(yīng)用程序的核心模型,但如果您剛接觸 Ajax,您一定會(huì)對(duì) Ajax 中大量的可用庫(kù)和這些庫(kù)之間巨大的差別感到驚訝不已。該領(lǐng)域中有許多 Ajax 框架,它們的功能常常重疊且沒有確定的勝出者。單就 Java 市場(chǎng)而言,有許多庫(kù)可用,包括 Echo、Dojo、DWR、Google Web Toolkit(GWT)、Java Web Parts、AjaxAnywhere、AjaxTags、Scriptaculous 和 Prototype。這些框架使用截然不同的方法。一些框架試圖通過(guò)生成 JavaScript 代碼的 Java 庫(kù)來(lái)隱藏 JavaScript,如 GWT。另一些框架致力于使 JavaScript 更易使用。一些相當(dāng)?shù)厝妫?Dom4J,而另一些則僅著力于解決好一個(gè)小問題。由于有許多流行的新技術(shù),解決方案之間互相割據(jù)的場(chǎng)面有時(shí)會(huì)很難駕馭,調(diào)試工具、UI 實(shí)踐(如 Back 按鈕)和明智的開發(fā)實(shí)踐的實(shí)現(xiàn)非常緩慢。Java 平臺(tái)上的 Ajax 庫(kù)的力量源自其多樣性。這也正是其缺點(diǎn)所在,因?yàn)槎鄻有詫?dǎo)致了難以決斷、集成方面的顧慮和復(fù)雜性。

有了 Ruby on Rails,開發(fā)體驗(yàn)就顯著不同了,這是由于兩個(gè)原因。首先,Ruby on Rails 有一個(gè)核心的 Web 開發(fā)平臺(tái):Ruby on Rails。其次,到目前為止,大多數(shù)在 Rails 上的 Ajax 開發(fā)體驗(yàn)都圍繞著兩個(gè)核心框架:Scriptaculous 和 Prototype(參見 參考資料)。Rails 方法使用運(yùn)行時(shí)代碼生成和定制標(biāo)記,這使您不必理會(huì)復(fù)雜的 JavaScript。是時(shí)候自己來(lái)實(shí)踐了。如果您想要在學(xué)習(xí)本文的過(guò)程中編寫代碼的話,需要下載 Rails,也要下載必要的 Ajax 框架(參見 參考資料)。打開您的 Rails 環(huán)境,跟我一起來(lái)吧。





回頁(yè)首


沒有 Ajax 的簡(jiǎn)單的 Rails 應(yīng)用程序

要使用 Rails 和 Ajax,就要?jiǎng)?chuàng)建一個(gè)空項(xiàng)目,并生成一個(gè)有兩個(gè)方法的控制器。一個(gè)控制器控制簡(jiǎn)單的頁(yè)面,另一個(gè)控制器建立一個(gè) Ajax 響應(yīng)。鍵入下列代碼:

rails ajax                        cd ajax                        script/generate controller ajax show time

第一行和第二行代碼生成一個(gè) Rails 項(xiàng)目,并切換到新目錄。第三行代碼生成一個(gè)叫做 ajax 的控制器,并查看兩個(gè)動(dòng)作:showtime。清單 1 顯示了該控制器的代碼:


清單 1. 有兩個(gè)空方法的控制器
                        class AjaxController < ApplicationController                        def show                        end                        def time                        end                        end                        

首先在不使用 Ajax 的情況下構(gòu)建兩個(gè)簡(jiǎn)單視圖,然后用 Ajax 將這兩個(gè)視圖綁定到一起。編輯 app/views/ajax 中的 show.rhtml 視圖,使它和清單 2 類似:


清單 2. 簡(jiǎn)單視圖
                        <h1>Ajax show</h1>                        Click this link to show the current <%= link_to "time", :action => "time" %>.                        

清單 1 和清單 2 中的代碼不支持 Ajax,但我還是會(huì)仔細(xì)分析該代碼。首先,看清單 1 中的控制器。兩個(gè)空的控制器方法處理進(jìn)來(lái)的 HTTP 請(qǐng)求。如果不明確地呈現(xiàn)一個(gè)視圖(使用 render 方法),Rails 會(huì)呈現(xiàn)和該方法同名的視圖。由于 Scriptaculous 和 Prototype 庫(kù)也使用 HTTP,Rails 不需要對(duì)標(biāo)準(zhǔn) HTTP 方法和 Ajax 方法進(jìn)行區(qū)分。

現(xiàn)在將注意力轉(zhuǎn)移到清單 2 中的視圖。大多數(shù)代碼都是簡(jiǎn)單的 HTML 代碼,只有第二行的 link_to 輔助例程例外:<%= link_to "time", :action => "time" %>。

正如在跨越邊界 之前的文章中所看到的那樣,Ruby 用其表達(dá)式的值替代 <%=h%> 之間的代碼。在這個(gè)示例中,link-to 方法是一個(gè)生成簡(jiǎn)單 HTML 鏈接的輔助例程。可以通過(guò)執(zhí)行該代碼看到該鏈接。通過(guò)鍵入 script/server 啟動(dòng)服務(wù)器,然后將瀏覽器指向 http://localhost:3000/ajax/show 。您將看到圖 1 中的視圖:


圖 1. 不涉及 Ajax 的簡(jiǎn)單用戶界面

在瀏覽器中,單擊菜單項(xiàng)來(lái)查看頁(yè)面源代碼(在 Internet Explorer 為 View > Source ,在 Firefox 中為 View > Page Source)。您將看到清單 3 中的代碼:


清單 3. 由 show.rhtml 生成的視圖
                        <h1>Ajax show</h1>                        Click this link to show the current <a href="/ajax/time">time</a>.                        

請(qǐng)注意清單 3 中的鏈接代碼。該模板讓 Rails 用戶不必面對(duì)冗長(zhǎng)且容易出錯(cuò)的 HTML 句法。(Ajax 代碼也是這樣運(yùn)行:使用輔助方法插入 JavaScript 代碼,該代碼替您管理遠(yuǎn)程請(qǐng)求和 HTML 替換。)如果單擊該鏈接,將看到針對(duì) time 方法的默認(rèn)視圖,但我還沒有實(shí)現(xiàn)它。為加以補(bǔ)救,請(qǐng)用清單 4 中的代碼替換 app/controllers/ajax_controller.rb 中的 time 方法。為保持簡(jiǎn)單,我直接從控制器中呈現(xiàn)視圖。稍后,我會(huì)把一切處理好并呈現(xiàn)視圖。


清單 4. 呈現(xiàn)時(shí)間
                        def time                        render_text "The current time is #{Time.now.to_s}"                        end                        

現(xiàn)在,當(dāng)單擊該鏈接時(shí),會(huì)得到圖 2 中的視圖:


圖 2. 不涉及 Ajax 的視圖

很快就能看到這個(gè) UI 的一個(gè)問題。這兩個(gè)視圖不從屬于單獨(dú)的頁(yè)面。該應(yīng)用程序表示一個(gè)單一概念:?jiǎn)螕粢粋€(gè)鏈接來(lái)顯示時(shí)間。為反復(fù)更新時(shí)間,每次都需要單擊該鏈接和 Back 按鈕。將該鏈接和時(shí)間放到相同的頁(yè)面中也許可以解決這個(gè)問題。但如果該頁(yè)面變得非常大或非常復(fù)雜,重新顯示整個(gè)頁(yè)面會(huì)很浪費(fèi),也會(huì)很復(fù)雜。





回頁(yè)首


添加 Ajax

Ajax 讓您可以只更新 Web 頁(yè)面的一個(gè)片段。Rails 庫(kù)為您處理大部分的工作。要將 Ajax 添加到這個(gè)應(yīng)用程序中,需要以下四個(gè)步驟:

  1. 配置 Rails 以使用 JavaScript。
  2. 更改時(shí)間鏈接來(lái)提交 JavaScript Ajax 請(qǐng)求,而不是僅呈現(xiàn)一個(gè) HTML 鏈接。
  3. 指定要更新的 HTML 片斷。
  4. 為更新的 HTML 內(nèi)容準(zhǔn)備一個(gè)位置。
  5. 構(gòu)建一個(gè)控制器方法,或者一個(gè)視圖來(lái)呈現(xiàn) Ajax 響應(yīng)。

首先,更改 app/views/ajax/show.rhtml 中的代碼,使其與清單 5 類似:


清單 5. 更改顯示視圖來(lái)使用 Ajax
                        <%= javascript_include_tag :defaults %>                        <h1>Ajax show</h1>                        Click this link to show the current                        <%= link_to_remote "time",                        :update => ‘time_div‘,                        :url => {:action => "time"} %>.<br/>                        <div id=‘time_div‘>                        </div>                        

我做了一些更改。首先,為處理配置,簡(jiǎn)單地將必要的 JavaScript 庫(kù)直接包含在視圖中。通常,還會(huì)有更多的視圖,為避免重復(fù),我將 JavaScript 文件包含在一個(gè)公共的 Rails 組件中,如 Rails 布局。本例只有一個(gè)視圖,所以一切從簡(jiǎn)。

其次,我改變了鏈接標(biāo)記來(lái)使用 link_to_remote。您一會(huì)兒就能看到這個(gè)鏈接的作用。請(qǐng)注意下列三個(gè)參數(shù):

  • 鏈接文本:從非 Ajax 的例子中照搬過(guò)來(lái)。

  • :update 參數(shù)。如果您以前沒見過(guò)這種語(yǔ)法,那么就把 :update => ‘time_div‘ 當(dāng)作是一個(gè)已命名的參數(shù),其中的 :update 是名稱,update_div 是值。此代碼告訴 Prototype 庫(kù):此鏈接中的結(jié)果將用 time_div 這一名稱更新 HTML 組件。

  • 代碼 :url => {:action => "time"} 指定該鏈接將調(diào)用的 URL。:url 從一個(gè)哈希映射表中獲取值。在實(shí)際中,該哈希映射表只有一個(gè)針對(duì)控制器動(dòng)作的元素::time。理論上,該 URL 也可以包含控制器的名稱和控制器需要的任何可選參數(shù)。

在清單 5 中,還可以看到空的 div,Rails 將用當(dāng)前時(shí)間更新它。

在瀏覽器中,裝載頁(yè)面 http://localhost:3000/ajax/show。單擊該鏈接,將看到圖 3 中的結(jié)果。


圖 3. 含 Ajax 的視圖

為了很好地了解這里發(fā)生的情況,請(qǐng)查看該 Web 頁(yè)面的源代碼。清單 6 顯示了該代碼:


清單 6. 顯示模板的結(jié)果(在啟用 Ajax 的情況下)
                        <script src="/javascripts/prototype.js?1159113688" type="text/javascript"></script>                        <script src="/javascripts/effects.js?1159113688" type="text/javascript"></script>                        <script src="/javascripts/dragdrop.js?1159113688" type="text/javascript"></script>                        <script src="/javascripts/controls.js?1159113688" type="text/javascript"></script>                        <script src="/javascripts/application.js?1159113688" type="text/javascript"></script>                        <h1>Ajax show</h1>                        Click this link to show the current                        <a href="#" onclick="new Ajax.Updater(                        ‘time_div‘, ‘/ajax/time‘, {asynchronous:true, evalScripts:true});                        return false;">time</a>.<br/>                        <div id=‘time_div‘>                        </div>                        

請(qǐng)注意包含的 JavaScript 列表。Rails 輔助方法(include_javascript_tags :defaults)為您構(gòu)建了此列表。接下來(lái),看到一個(gè)用來(lái)構(gòu)建新的 Ajax.Updater 對(duì)象的 JavaScript 函數(shù)調(diào)用,而不是一個(gè) HTML 鏈接。正如您所料想的那樣,名為 asynchronous 的參數(shù)被設(shè)置為 true。最后,在 HTML div 標(biāo)記中看不到值,這是由于初始頁(yè)面在那里沒有值。





回頁(yè)首


使用其他 Ajax 選項(xiàng)

Ajax 能生成強(qiáng)大的動(dòng)作,甚至能生成一些預(yù)料不到的動(dòng)作。例如,用戶也許沒注意到更新的時(shí)間鏈接。link_to_remote 選項(xiàng)讓您能夠輕易地將特殊效果應(yīng)用到該條目上,從而讓用戶注意到該結(jié)果?,F(xiàn)在將應(yīng)用一些效果。請(qǐng)更改 show.rhtml 中的 link_to_remote 輔助方法,使它與清單 7 類似:


清單 7. 添加效果
                        <%= link_to_remote "time",                        :update => ‘time_div‘,                        :url => {:action => "time"},                        :complete => "new Effect.Highlight(‘time_div‘)" %>                        

最佳 Ajax 效果會(huì)使您的更改獲得臨時(shí)的關(guān)注,但卻不會(huì)永久持續(xù)。您的目標(biāo)應(yīng)該是把更改提示給用戶,而不打斷他們的工作流。像這種用黃色來(lái)弱化強(qiáng)調(diào)的技術(shù),或用滑入內(nèi)容或淡出內(nèi)容來(lái)讓用戶注意的技術(shù)都不是長(zhǎng)久之計(jì)。

到目前為止,鏈接是您見到的惟一觸發(fā)器。Ajax 還有許多其他的可用武器,一些由用戶驅(qū)動(dòng),而另一些由程序事件驅(qū)動(dòng),如時(shí)鐘。它是一個(gè)像鬧鐘一樣并不需要用戶干預(yù)的東西??梢杂?Ajax 的 periodically_call_remote 方法定期更新時(shí)鐘。請(qǐng)按照清單 8 編輯 show.rhtml 中的代碼:


清單 8. 定期調(diào)用遠(yuǎn)程方法
                        <%= javascript_include_tag :defaults %>                        <h1>Ajax show</h1>                        <%= periodically_call_remote :update => ‘time_div‘,                        :url => {:action => "time"},                        :frequency => 1.0 %>                        <div id=‘time_div‘>                        </div>                        

圖 4 顯示了結(jié)果:不需要用戶干預(yù),每隔一秒鐘進(jìn)行更新的時(shí)鐘:


圖 4. 用 Ajax 定期更新的時(shí)鐘

盡管 Rails 視圖中的代碼和不含 Ajax 的版本相似,但背后的代碼卻很不同:此版本使用 JavaScript 代替了 HTML。可以通過(guò)在瀏覽器中查看源代碼看到清單 9 中的代碼:


清單 9. periodically_call_remote 的源代碼
                        <script src="/javascripts/prototype.js?1159113688" type="text/javascript"></script>                        <script src="/javascripts/effects.js?1159113688" type="text/javascript"></script>                        <script src="/javascripts/dragdrop.js?1159113688" type="text/javascript"></script>                        <script src="/javascripts/controls.js?1159113688" type="text/javascript"></script>                        <script src="/javascripts/application.js?1159113688" type="text/javascript"></script>                        <h1>Ajax show</h1>                        <script type="text/javascript">                        //<![CDATA[                        new PeriodicalExecuter(function() {new Ajax.Updater(                        ‘time_div‘, ‘/ajax/time‘, {asynchronous:true, evalScripts:true})}, 1.0)                        //]]>                        </script>                        <div id=‘time_div‘>                        </div>                        

請(qǐng)一定注意這里發(fā)生的情況。您正在一個(gè)更高層的抽象之上有效地工作,而不是使用小塊的自定義 JavaScript 片段,Ruby on Rails 模板系統(tǒng)使使用模型變得相當(dāng)自然。

正如之前提到的那樣,我正從控制器中直接呈現(xiàn)文本。這一簡(jiǎn)化使開始編程變得很容易,但卻不能一直持續(xù)下去。視圖應(yīng)該處理顯示,控制器應(yīng)該在視圖和模型間調(diào)度數(shù)據(jù)。這項(xiàng)設(shè)計(jì)技術(shù)叫做模型-視圖-控制器(MVC),它使對(duì)視圖或模型的更改更容易分隔開。為使這個(gè)應(yīng)用程序符合 MVC,可以讓 Rails 呈現(xiàn)默認(rèn)視圖,正如預(yù)料的那樣,該內(nèi)容將替代 time-div 之前的內(nèi)容。請(qǐng)按照清單 10 更改 app/controllers/ajax_controller.rb 中的 time 方法:


清單 10. 重構(gòu)
                        def time                        @time = Time.now                        end                        

請(qǐng)按照清單 11 更改 app/views/ajax/time.rhtml 中的視圖:


清單 11. 使用視圖呈現(xiàn) Ajax 內(nèi)容
                        <p>The current time is <%=h @time %></p>                        

控制器方法設(shè)置一個(gè)名為 @time 的實(shí)例變量。由于控制器什么都沒明確地呈現(xiàn)出來(lái),Rails 將 time.rhtml 視圖呈現(xiàn)出來(lái)。這種使用模型和呈現(xiàn)一個(gè)不含 Ajax 的視圖完全一致。 可以再一次看到,Rails 使開發(fā)人員不必考慮使用 Ajax 和不使用 Ajax 的應(yīng)用程序間的區(qū)別。從傳統(tǒng)的 Web 應(yīng)用程序到 Ajax,該使用模型都驚人地相似。由于使用 Ajax 的成本如此之低,越來(lái)越多的 Rails 應(yīng)用程序都開始利用 Ajax。





回頁(yè)首


Rails 中 Ajax 的其他用法

Rails Ajax 體驗(yàn)領(lǐng)域?qū)拸V且內(nèi)容深刻 —— 我無(wú)法用單篇文章甚至一系列文章來(lái)概括其深刻的內(nèi)容。我只能指出 Rails Ajax 支持可以解決其他一些問題。下面是 Rails 中 Ajax 的一些通常用法:

  • 提交遠(yuǎn)程表單。 除了必須異步提交以外,Rails 中的 Ajax 表單和傳統(tǒng)表單的執(zhí)行方式完全一樣。這意味著 Rails 中的 Forms 輔助標(biāo)記讓您必須指定一個(gè)要更新的 URL,執(zhí)行可視化的效果,正如使用 link_to_remote 一樣。正如 link-to-remote 擴(kuò)展了 link_to 輔助方法一樣,Rails submit_to_remote 擴(kuò)展了一個(gè) Rails submit 輔助方法。

  • 執(zhí)行復(fù)雜腳本。 Rails 開發(fā)人員常常需要執(zhí)行復(fù)雜的腳本,遠(yuǎn)不止更新單個(gè) div 和執(zhí)行效果那么簡(jiǎn)單。為此,Rails 提供 JavaScript 模板。用 JavaScript 模板,可以將任意 JavaScript 腳本作為 Ajax 請(qǐng)求的結(jié)果來(lái)執(zhí)行。這些模板的一些常見用法(叫作 RJS 模板)為更新多個(gè) div、處理表單驗(yàn)證和管理 Ajax 錯(cuò)誤場(chǎng)景。

  • 拼寫補(bǔ)全。 您一定想基于數(shù)據(jù)庫(kù)中的條目為您的用戶提供拼寫補(bǔ)全服務(wù)。例如,如果用戶鍵入 Bru,我想讓我的應(yīng)用程序注意到數(shù)據(jù)庫(kù)中 “Bruce Tate” 這個(gè)值??梢允褂?Ajax 定期檢查字段的更改,并根據(jù)用戶鍵入的內(nèi)容發(fā)送拼寫補(bǔ)全建議。

  • 動(dòng)態(tài)構(gòu)建復(fù)雜表單。 在業(yè)務(wù)領(lǐng)域里,常常需要查看部分已完成表單,然后才能知道用戶應(yīng)該完成哪個(gè)字段。例如,如果用戶擁有一些特定種類的收入或費(fèi)用,那么 1040EZ 納稅單是無(wú)效的??梢栽谶@個(gè)過(guò)程中用 Ajax 更新表單。

  • 拖放。 可以用 Rails 快速實(shí)現(xiàn)拖放支持,這比大多數(shù)其他框架要省力得多。

 





回頁(yè)首


結(jié)束語(yǔ)

Ajax 并不是沒有問題。當(dāng) Ajax 運(yùn)行良好時(shí),整個(gè)體驗(yàn)會(huì)是激動(dòng)人心的。但當(dāng)運(yùn)行不順利時(shí),您也許會(huì)發(fā)現(xiàn)對(duì)其進(jìn)行調(diào)試是一個(gè)全新的領(lǐng)域,調(diào)試技術(shù)和工具還沒有其他語(yǔ)言中那么成熟。Ruby on Rails 的確有一個(gè)核心優(yōu)勢(shì):簡(jiǎn)單。Rails 包裝器(加上很棒的社區(qū)支持)使得進(jìn)入這一新環(huán)境變得簡(jiǎn)單,而且最初的投資非常低。但 Rails 支持也僅限于此。這兩個(gè)框架還沒有覆蓋 Ajax 的全部?jī)?nèi)容,無(wú)法滿足每個(gè)用戶的需求。

Java 語(yǔ)言有更多的 Ajax 框架和方法可供選擇??梢哉业礁哽`活性的,也可以找到具有很棒的支持基礎(chǔ)的。但靈活性是要付出代價(jià)的。您不僅需要一個(gè)強(qiáng)大的 Ajax 框架,也需要一個(gè) Web 開發(fā)框架。例如,集成 JSF 框架和集成 Struts 是兩種截然不同的體驗(yàn)。新技術(shù)通常追求簡(jiǎn)單。對(duì)于那些在 UI 中需要 Ajax 的出色特性,卻又不需要由 Java 提供的高級(jí)企業(yè)集成特性的問題,Ajax on Rails 也許正合適。下一次,我將更深入地介紹 JavaScript。請(qǐng)繼續(xù)關(guān)注跨越邊界。



參考資料

學(xué)習(xí)
  • 您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文 。

  • Java To Ruby: Things Every Manager Should Know (Pragmatic Bookshelf,2006 年):這是本文作者編著的一本書,講述何時(shí)何處從 Java 編程轉(zhuǎn)到 Ruby on Rails 以及如何完成這種轉(zhuǎn)變。

  • Beyond Java (O’Reilly,2005 年):本文作者編寫的一本書,講述 Java 語(yǔ)言的提高和穩(wěn)步發(fā)展,以及在某些方面能夠挑戰(zhàn) Java 平臺(tái)的技術(shù)。

  • Book review: Agile Web Development with Rails ”(Darren Torpey,developerWorks,2005 年 5 月):這里介紹的這本書可以加深讀者對(duì) Rails 及敏捷開發(fā)方式原理的理解。

  • Ajax: A New Approach to Web Applications”(Jesse James Garrett,Adaptive Path,2005 年 2 月):“Ajax” 這一術(shù)語(yǔ)的發(fā)明者 Garrett 描述了其基本結(jié)構(gòu)和用戶體驗(yàn)特征。

  • ScriptaculousPrototype:增強(qiáng) Rails Ajax 的兩個(gè) JavaScript 框架。

  • Rails Ajax helpers:這些輔助方法讓 Rails 開發(fā)人員不必考慮低層 Ajax 編程的復(fù)雜性。

  • Ajax 技術(shù)資源中心:developerWorks Ajax 的門戶,包含了專注于 Ajax 編程的內(nèi)容、blog、論壇和其他資源。

  • Web 開發(fā)專區(qū):developerWorks Web 開發(fā)方面的資源中心,包含了專注于 Web 和 Web 2.0 開發(fā)的文章、教程和其他資源。

  • Ajaxian:這是一個(gè)很棒的 Ajax 門戶,它提供對(duì)所有 Ajax 相關(guān)內(nèi)容的討論。

  • Ajax BluePrints:對(duì) Ajax 框架和 Java 編程語(yǔ)言設(shè)計(jì)技術(shù)的討論。

  • Programming Ruby (Dave Thomas et al.,Pragmatic Bookshelf,2005 年):一本流行的關(guān)于 Ruby 編程的書。

  • Java 技術(shù)專區(qū):數(shù)百篇關(guān)于 Java 編程各方面的文章。


獲得產(chǎn)品和技術(shù)
  • Ruby on Rails:下載開放源碼的 Ruby on Rails Web 框架。

  • Ruby:從該項(xiàng)目的 Web 站點(diǎn)獲取 Ruby。


討論


關(guān)于作者

Bruce Tate 居住在德克薩斯州的首府奧斯汀,他是一位父親,同時(shí)也是山地車手和皮艇手。他是三本 Java 暢銷書的作者,包括榮獲 Jolt 大獎(jiǎng)的 Better, Faster, Lighter Java。最近他又出版了 Beyond Java. 一書。他在 IBM 工作了 13 年,現(xiàn)在是 RapidRed 顧問公司 的創(chuàng)始人,在這里他潛心研究基于 Java 技術(shù)和 Ruby on Rails 的輕量級(jí)開發(fā)策略和架構(gòu)。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Ajax 框架
使用 Ruby on Rails 快速開發(fā) Web 應(yīng)用程序
AngularJS自學(xué)之路(一)
ASP.NET MVC4 IN ACTION學(xué)習(xí)筆記
跨越邊界: JavaScript 語(yǔ)言特性
動(dòng)態(tài)調(diào)用動(dòng)態(tài)語(yǔ)言,第 2 部分: 在運(yùn)行時(shí)尋找、執(zhí)行和修改腳本
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服