jquery mobileとphonegap(Apache Cordova)を使用してモバイルアプリを構築しています。問題は、「ログイン」ページまたは「ログイン」ページの場合、最初にロードするページを決定する前に、まずDBクエリを作成する必要があることです。メインページ"。
phonegapのドキュメントに基づいて、「deviceready」イベントをバインドして、デバイスの準備ができたことを確認してから、DBクエリを実行する必要があります。
document.addEventListener("deviceready", onDeviceReady, false);
「onDeviceReady」という関数は、DBが作成されていない場合は作成し、「users」という名前のテーブルにクエリを実行します。1人以上のユーザーがいる場合は、「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順序のDOMに従った最初のページのコードがロードされる場合、このページは次のようにロードされます。
<div data-role="page" id="page-init">
<div data-role="header" data-theme="c" data-position="fixed">
<h1>Init page</h1>
</div><!-- /header -->
</div>
$.mobile.changePage("main.html");
「users」テーブルに1つ以上のユーザーレコードがあるかどうかを確認してからページを「main.html」に変更すると、最初に「page-init」ページが読み込まれ、次に「main.html」とiが読み込まれます。ユーザーは一種のフラッシュを使用できるため、これは望ましくありません。どのページが最初に表示されるかを「ユーザー」テーブルに確認したら、決定したいだけです。