在JQM 1.4之前,我使用data-role="dialog"
创建了对话框,并且这些页面没有添加到后台堆栈中,因此导航一个然后再按回会将您带到对话框之前的页面。
现在1.4.5,对话框定义为data-role="page"
data-dialog="true"
。使用此方法,对话框将添加到后台堆栈,因此,如果我导航对话框然后再点击,我将返回到对话框。这不是我想要的行为。当对话框打开时,有没有办法告诉JQM不要将它添加到后栈?
答案 0 :(得分:1)
自jQuery Mobile 1.4起, dialog 小部件已弃用,将在1.5中删除。它现在转换为一个页面 - 正如您所提到的 - 使用data-dialog="true"
。
当您导航到对话框时,jQM会更新框架的导航历史记录以及浏览器的导航历史记录。即使您在禁用changeHash
的情况下以编程方式导航到对话框,当您点击后退按钮时,您将重定向到第二个以前的历史记录。
解决方法是收听pagecontainerbeforechange
并更改toPage
以导航到调用对话框的页面。
$(document).on("pagecontainerbeforechange", function (e, data) {
if (typeof data.toPage == "string" && data.options.direction == "back") {
var active = $.mobile.navigate.history.activeIndex;
for (var i = active; i >= 0; i--) {
if (!$($.mobile.navigate.history.stack[i].hash).hasClass("ui-dialog") && !$($.mobile.navigate.history.stack[i].hash).hasClass("ui-page-active")) {
data.toPage = $.mobile.navigate.history.stack[i].url;
data.options.transition = "flip";
break;
}
}
}
});
当您想要更改toPage
时,它应该是string
而不是object
。该事件在每次导航时触发两次,首先返回string
,然后返回object
。
返回string
时,请检查导航方向options.direction
。如果方向为back
,则按相反顺序循环$.mobile.navigate.history.stack
。上一条记录不应是对话框ui-dialog
,也不应是有效网页ui-page-active
。如果两个条件都返回true,则更改toPage
。
<强> Demo 强>