天天看點

《jQuery Mobile快速入門》—— 2.3 Ajax驅動的導航

本節書摘來異步社群《jquery mobile快速入門》一書中的第2章,第2.3節,作者:【美】brad broulik,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

jquery mobile快速入門

在上面提到的多頁面案例中(見程式清單2-3),我們了解到jquery mobile如何從一個内部頁面導航到另外一個内部頁面。當多頁面文檔在初始化時,内部頁面已經添加到dom中,這樣從一個内部頁面轉換到另外一個頁面時,速度才會相當快。在從一個頁面導航到另外一個頁面時,我們可以配置要應用的頁面轉換類型。預設情況下,架構會為所有的轉換應用一個“滑動(slide)”效果。在本章後面,我們會讨論可以選擇的轉換和轉換類型。

《jQuery Mobile快速入門》—— 2.3 Ajax驅動的導航

當一個單頁面轉換到另外一個單頁面時,導航模型是不同的。例如,我們可以從多頁面中提取出contact頁面,然後命名為contact.html檔案。現在我們的home頁面(hijax.html)可以通過一個普通的http連結引用來傳回contact頁面。

《jQuery Mobile快速入門》—— 2.3 Ajax驅動的導航

當單擊上面的“contact us”連結時,jquery mobile将會按照如下步驟處理該請求。

1.jquery mobile會解析href,然後通過一個ajax請求(hijax)載入頁面。為了獲得一個直覺了解,請看圖2-3。如果成功載入頁面,則該頁面會添加到目前頁面的dom中。

當頁面成功添加到dom中後,jquery mobile可以根據需要來增強該頁面,更新基礎(base)元素的@href,并設定data-url屬性(如果沒有被顯式設定的話)。

《jQuery Mobile快速入門》—— 2.3 Ajax驅動的導航

2.架構随後使用應用的預設“滑動”轉換模式轉換到一個新的頁面。架構也可以實作無縫的css轉換,因為“from”頁面和“to”頁面都存在于dom中。在轉換完成之後,目前可見的頁面或活動頁面将會被指定為“ui-page-active”css類。

3.産生的url也可以作為書簽。例如,如果想深連結(deep link)到contact頁面,則可以通過其完整的路徑來通路:

注意:

作為一個額外的優點,如果浏覽器支援html5的pushstate,則基于ajax的導航也可以在該浏覽器中産生完全正确的url。桌面式safari、chrome、firefox和opera的最近版本都支援html5的這個特性。android(2.2+)和ios5也支援pushstate。在不支援該特性的浏覽器中,基于#的url(<code>http://&lt;host:port&gt;/hijax.html#contact.html</code>)将會用來保持共享url和對url添加書簽的能力。

4.如果頁面載入失敗,則會顯示和淡出一條短的錯誤消息,該消息是對“error loading page(頁面載入錯誤)”消息的覆寫(overlay)(見圖2-4)。

《jQuery Mobile快速入門》—— 2.3 Ajax驅動的導航

changepage( )函數處理從一個頁面轉換到另一個頁面時涉及的所有細節。你可以轉換到除目前頁面之外的任何頁面。可用的轉換類型的完整清單如表2-1所示。

topage(string或jquery集合)。将要轉向的頁面。

topage(string)。一個檔案url(“contact.html”)或内部元素的id(“#contact”)。

topage(jquery集合)。包含一個頁面元素的jquery集合,而且該頁面元素是該集合的第一個參數。

options(object)。配置changepage請求的一組鍵/值對。所有的設定都是可選的。

transition(string,default: $.mobile.defaulttransition)。為changepage應用的轉換。預設的轉換是“滑動”。

reverse(boolean, default:false)。訓示該轉換是向前轉換還是向後轉換。預設的轉換是向前。

changehash(boolean, default:ture)。當頁面轉換完成之後,更新頁面url的#。

role(string,default:“page”)。在顯示頁面時使用的data-role值。如果頁面是對話框,則使用“dialog”。

pagecontainer(jquery集合,default:$.mobile.pagecontainer)。指定應該包含載入頁面的元素。

type (string, default:“get”)。在生成頁面請求時,指定所使用的方法(get或post)。

data (string或object, default:undefined)。發送給一個ajax頁面請求的資料。

reloadpage (boolean, default: false)。強制頁面重新載入,即使它已經位于頁面容器的dom中。

showloadmsg (boolean, default: true)。在請求頁面時,顯示載入資訊。

fromhashchange(boolean, default: false)。訓示changepage是否來自于一個hashchange事件。

《jQuery Mobile快速入門》—— 2.3 Ajax驅動的導航

重要:

ajax導航不能用于載入一個外部連結的情況。

《jQuery Mobile快速入門》—— 2.3 Ajax驅動的導航

在這樣的情況下,将會發生正常的http請求過程。而且,也無法應用css轉換。前面提到,通過動态地将“from”和“to”頁面載入到同一個dom,架構可以實作平滑的轉換,而且随後也可以應用一個平滑的css轉換。不使用ajax導航,則無法實作平滑轉換,而且在轉換期間,也不會顯示預設的載入消息($.mobile.loadingmessage)。

ajax導航是全局啟用的,當你很在意dom的大小時,或者是你需要支援的某個特定裝置不支援hash曆史更新時(見下面的“注意”),則可以禁用這個特性。預設情況下,jquery mobile可以為我們管理dom的大小或緩存,它隻将活動頁面轉換所涉及的“from”和“to”頁面合并到dom中。要禁用ajax導航,在綁定移動初始事件時,設定$.moible.ajaxenabled=false。有關配置jquery mobile或管理dom緩存的更多詳情,請見第8章。

在所有已知與hash曆史更新有沖突的平台上,ajax導航已經被禁用。例如,jquery mobile已經為blackberry 5、opera mini(5.0-6.0)、nokia symbian 3和windows phone 6.5禁用了ajax導航($.mobile.ajaxenabled=false)。在使用普通的http和全頁面重新整理時,這些裝置更為實用。

繼續閱讀