一. $.mobile.changePage() & $.mobile.loadPage()
1.$.mobile.changePage()
$.mobile.changePage() 方法会在页面加载时自动调用,若这个页面为当前文档中的不同 "page",则会转到这个新页面隐藏旧页面;若这个页面为外部页面,即页面与当前页面不在同一文档中(本质上是新页面不在当前 DOM 中),$.mobile.changePage() 首先会调用 $.mobile.loadPage() 把外部页面的元素插入到 DOM 中,再显示新页面。这也是对页面加载过程的简单复述。
$.mobile.changePage() 有两个参数 to (string or object, 必须) 和 options (object, 可选),具体如下:
(1)—— to (string or object, 必须)
to 为必要参数,其值可以为 string(字符串,如 "about/us.html") 或 object(对象,如 $("#about")),这主要是面向两种不同的页面,string 形式的为外部页面链接,而 object 为同一文档中的不同 "page" ,如 "#page2" ,$.mobile.changePage() 会把其处理成包含这个 DOM 的 jQuery 对象,即 $('#page2') 这种形式,而 $.mobile.changePage() 内部会判断 to 参数的形式,若是 string 则调用 $.mobile.loadPage() 把外部页面的元素插入到 DOM 中,再显示页面。
(2)—— options (object, 可选)
options 为可选参数,其值为 object (对象),这个 object 包含多个属性,这些属性储存一个页面的各种参数,jQuery Mobile 会根据这些参数来控制如何加载页面,以及对页面进行初始化。具体属性值如下:
allowSamePageTransition (boolean, 默认值: false) 默认情况下,$.mobile.changePage() 是不会理会跳转到当前页面的请求。把这个属性设置为 "true" ,则可以允许这种请求
changeHash (boolean, 默认值: true) 判断地址栏上的哈希值是否应该被更新。
data (object 或 string, 默认值: undefined) Ajax 请求时发送的数据。仅当 to 参数的值为一个 URL 时可用。
dataUrl (string, 默认值: undefined) 当浏览器完成页面转换时要更新浏览器的地址栏上的 URL 。如不特别指定,则使用 data-url 的属性值。
pageContainer (jQuery collection, 默认值: $.mobile.pageContainer) 指定包含页面的 DOM 对象的 jQuery 对象。
reloadPage (boolean, 默认值: false) 强制刷新页面,即使页面容器的 DOM 已经准备好仍然会执行刷新。仅当 to 参数的值为一个 URL 时可用。
reverse (boolean, 默认值: false) 设置页面转场动画的方向。当该属性设置为 "true" 时页面转场反向。
role (string, 默认值: undefined) 显示页面的时候使用 data-role 值。默认情况下为 undefined,即取决于元素的 @data-role 属性值(标签上 data-role 的值)。
showLoadMsg (boolean, 默认值: true) 设置当加载外部页面时是否显示加载提示信息。
transition (string, 默认值: $.mobile.defaultPageTransition) 设置页面加载时使用的过场动画。
type (string, default: "get") 设置请求页面时使用的方法 ("get" 或 "post") 。仅当 to 参数的值为一个 URL 时可用。
这里引用例子说明一下 $.mobile.changePage() 的使用方法,手动调用该方法可以触发跳转到一个新页面,例如,在 Web Apps 发生错误时可以跳转到一个提示错误的页面。
// 转入到 "about us" 页面并使用 "slideup" 转场动画 $.mobile.changePage( "about/us.html", { transition: "slideup"} ); // 转入到 "search results" 页面, 使用 来自 id 为 search 的表单数据,并把页面请求方式改为 "post" $.mobile.changePage('searchresults.php', { type: "post", data: $("form#search").serialize() }); // 转入到 "confirm" 页面并使用 "pop" 转场动画,不更新历史记录(地址栏哈希值不更新) $.mobile.changePage('../alerts/confirm.html', { transition: "pop", reverse: false, changeHash: false });
发生错误时可以跳转到一个提示错误的页面。
$(function(){ // 发生错误 // 已 "slideup" 的方式弹出对话框提示发生了错误 $.mobile.changePage('../alerts/confirm.html', { transition: "slideup", role: "dialog" }); });
2.$.mobile.loadPage()
如上面所述,$.mobile.loadPage() 用于加载一个外部页面,但这里的加载是指把外部页面的元素插入到当前 DOM 中,并在插入之前对页面内容进行 jQuery Mobile 增强 。该方法会被 $.mobile.changePage() 调用,条件是 $.mobile.loadPage() 的第一个参数 to 为 string (即加载的页面为外部页面)。这个方法仅仅是进行插入 DOM 操作,不会影响当前激活的页面,所以它可以用于在后台加载页面(只插入 DOM 而不显示页面),该方法会返回一个 deferred 对象,包含页面请求成功与否等相关信息,并会在页面增强和插入 DOM 后分解这个对象。
$.mobile.loadPage() 有两个参数 url (string or object, 必须) 和 options (object, 可选),具体情况如下:
(1)—— url (string or object, 必须)