我正在使用jquery mobile和phonegap(Apache Cordova)构建移动应用程序,问题是首先我需要先进行数据库查询,然后才决定首先加载哪个页面,如果是“登录”页面或“主页”。
根据phonegap文档,我需要绑定“deviceready”事件,以了解设备何时就绪,然后进行数据库查询。
document.addEventListener("deviceready", onDeviceReady, false);
名为“onDeviceReady”的函数创建数据库(如果未创建),然后查询名为“users”的表,如果有一个或多个用户我不想显示名为“main.html”的页面否则页面名为“login.html”。
function onDeviceReady() {
var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);
}
基本上,问题在于执行此函数时会加载第一页,因为在调用“onDeviceReady”函数之前执行了以下代码:
$(document).bind( "mobileinit", function(){
$.mobile.listview.prototype.options.filterPlaceholder = "Buscar...";
//-> patch for phonegap
$.mobile.allowCrossDomainPages = true;
$.mobile.page.prototype.options.backBtnText = "atrás";
});
$( document ).bind( "pagebeforeload", function( event, data ){
// here i think i would say to phone gap not to load any page until i make the db queries
//i think i can't make the DB queries here because the "pagebeforeload" is launched before the "deviceready" function
});
如果第一页的代码按照ASC的顺序加载了此页面:
<div data-role="page" id="page-init">
<div data-role="header" data-theme="c" data-position="fixed">
<h1>Init page</h1>
</div><!-- /header -->
</div>
如果我检查“users”表中是否有一个或多个用户记录,则使用$.mobile.changePage("main.html");
将页面更改为“main.html”,首先加载“page-init”页面然后“main.html”,我不希望这样,因为用户可以选择一种闪存。
一旦我检查了“用户”表,我想要决定首先显示哪个页面。
答案 0 :(得分:4)
我在stackoverflow上学到了以下内容,但我找不到答案,所以我会自己回答:
在索引的末尾:
$(document).bind("mobileinit", onMobileInit);
$(document).ready(onPageLoad);
在索引中的任何JS文件或脚本标记中:
function onMobileInit() {
console.log("mobile init");
$.mobile.autoInitialize = false;
}
function onPageLoad() {// Document.Ready
console.log("document ready");
try {
if(someCondition) {
document.location.hash = "#profile";
} else {
document.location.hash = "#signIn";
}
} catch (exception) {
} finally {
$.mobile.initializePage();
}
}
P.S。你可以将init代码放在其他地方,但是加载屏幕会更好,因为它是一个db调用,我使用浏览器存储,这是我认为更快的方式
答案 1 :(得分:1)
听起来这可以通过加载屏幕来解决。 只需将第一页创建为加载屏幕,然后检查数据库并根据数据库结果加载正确的页面。您甚至可以添加JQM微调器来告诉用户正在进行的操作。
答案 2 :(得分:0)
这个问题很旧,但是我可以说,对我来说,只是分配您要document.location.hash的哈希,例如document.location.hash =“ #profile” ;,而无需移动初始化程序就可以正常工作。您需要在运行document.ready()之前执行此操作。