JQuery Mobile 1.4.5 - 不要导航'返回'到对话框页面

时间:2014-12-08 21:14:37

标签: jquery-mobile dialog

在JQM 1.4之前,我使用data-role="dialog"创建了对话框,并且这些页面没有添加到后台堆栈中,因此导航一个然后再按回会将您带到对话框之前的页面。

现在1.4.5,对话框定义为data-role="page" data-dialog="true"。使用此方法,对话框将添加到后台堆栈,因此,如果我导航对话框然后再点击,我将返回到对话框。这不是我想要的行为。当对话框打开时,有没有办法告诉JQM不要将它添加到后栈?

1 个答案:

答案 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