【问题标题】:Jquery Mobile change page based on a conditionJquery Mobile根据条件更改页面
【发布时间】:2014-11-09 21:54:40
【问题描述】:

我有 2 个 Jquery Mobile 页面(登录和主页)。当用户首次启动应用程序 (phonegap) 时,系统会检查本地存储变量 ('ses_already_login)。如果设置了变量,那么系统不应该显示登录页面,而是应该显示主页。如果未设置变量,则应显示登录页面。

登录页面和主页都包含页眉和页脚以及一些使用 jQuery 动态加载的表单控件。

我正在做类似下面的事情,我看到一个空白的灰色屏幕。条件通过并且可以在我进入空白屏幕之后看到警报消息。

$(document).on("pagebeforeshow","#pg_login",function(){
  if(checkAlreadyLogin()){
    alert('I am inside');
    $.mobile.changePage("#pg_home");
    e.preventDefault();
  }
});

我也知道 changePage 已被弃用。那么,有人可以帮助我如何重定向/更改到主页。

【问题讨论】:

  • 您尚未描述当前解决方案中的哪些问题。您现有的逻辑是如何失败的?
  • @Kolban - 逻辑没有失败。条件变为真,然后我看到一个空白页。
  • 可能是 jQuery Mobile 语义不允许您在页面更改生命周期的回调期间尝试更改页面。如果在页面初始化时运行逻辑以确定首先显示哪个页面,然后直接更改为该页面,而不是在页面更改生命周期中运行呢?

标签: jquery-mobile cordova


【解决方案1】:

解决方案 1:

在这种情况下,您需要使用pagecontainerbeforechange,而不是任何其他事件。因为在这个阶段,您可以更改toPage 属性以将用户重定向到您想要的任何页面。

该事件总是 触发两次并返回toPage,其中包含目标页面的url(字符串)或jQuery object。但是,在第一次运行时,它会返回 jQuery object 两次。当它第一次触发时,除了您的条件之外,您还必须确保toPageobjectabsUrlundefined

$(document).on("pagecontainerbeforechange", function(e, data) {
  if(typeof data.toPage == "object" && typeof data.absUrl == "undefined" && !condition) {
    data.toPage = $("#login"); /* change to page with ID "login" */
  }
});

Demo


解决方案 2:

另一种解决方案是监听mobileinit事件,检查用户是否登录,然后改变目标页面的位置,使之成为DOM中的“第一”页。

$(document).on("mobileinit", function (e, data) {
    $.mobile.autoInitializePage = false; /* optional - stop auto-initalization */
    if (!condition) {
        $(function () {
            $("#login").prependTo("body"); /* make "login" page first child of "pagecontainer" (body by default) */
            $.mobile.initializePage(); /* optional - manual initialization */
        });
    }
});

您可以根据需要延迟框架的自动初始化,但是,jQuery 函数 .prependTo 应该包含在 $(function() {});.ready() 中,因为 mobileinit 在 jQuery 库之前触发准备好了。

Demo

【讨论】:

  • 实际上,我以首先加载登录屏幕然后进入主屏幕的方式编写了我的应用程序。但是我从您的代码中了解到的是相反的情况,它首先显示主页,如果未加载会话,则显示登录屏幕。这说得通。我更改了代码 w.r.t 解决方案 1,它可以工作。谢谢
  • @Malaiselvan 不客气 :) 我认为第二种解决方案的代码更少,并且只触发一次。 pagecontainerbeforechange 将在导航时继续触发。无论如何,这是你的电话,做你认为最好的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多