jquery mobile中的条件初始页面

时间:2012-03-30 00:15:01

标签: jquery-mobile cordova

我正在使用带有PhoneGap的jQuery mobile,并希望在第一次使用该应用时显示登录页面,并在后续加载时显示索引页。

我目前的解决方案是在deviceready上使用以下内容

if(!localStorage.registered){ 
   $.mobile.changePage( "#login", { transition: "none"} ); 
}

但是,我的问题是您仍然看到页面转换。我希望登录页面成为第一个可见的页面。

有什么建议吗?谢谢!

3 个答案:

答案 0 :(得分:3)

这个Q已经有几个月了,它仍然没有答案,我没有任何手机缺口的经验,但我做jQM,所以我认为这可能会有所帮助。

我目前通过延迟jQM的自动初始化在我的应用上采用了这个解决方案。 这是一个如何基于我的应用程序如何做到这一点的示例。

(function() {

  #stop jQM from auto initialising
  $(document).on("mobileinit",function() {
    $.mobile.autoInitializePage = false;
  });

  var my_app = new MyApp();

  # custom afterinit event is triggered on the app instance 
  $(my_app).on('afterinit',function() {
    var initial = 'login';
    if(localStorage.registered) {
      initial = 'home';
    }
    # set the page hash to our start page
    window.location.hash = initial;

    #initialise jQM
    $.mobile.initializePage();
  });

})();

确保你保护决定是否允许登录的东西,在我的应用程序中,我有一个数据结构,应用程序需要ajax到MyApp.appdata它只有在登录实际成功时才会存​​在。< / p>

答案 1 :(得分:1)

另一种解决方案可能是拥有代理页面。 我在另一个应用程序中使用的另一种方法。

初始“加载”步骤,它只是一个虚拟页面。 在您的文档中创建一个页面作为第一页,例如

<div id="loading" data-role="page">Loading</div>
在mobileinit步骤中

绑定到pageshow事件。

$(document).on("mobileinit",function() {
  $('#loading').on('pageshow',function() {

    # ...
    # do login check here
    # ...

    var initial = 'login';
    if(localStorage.registered) {
      initial = 'home';
    }
    # change to our initial page
    $.mobile.changePage(initial);
  });

});

答案 2 :(得分:0)

如何隐藏#registration和#login然后执行:

if(localStorage.registered){ 
    $('#login').show(); 
} else {
    $('#registration').show();
}