我正在使用phonegap和jQuery Mobile构建一个Android应用程序。
从phonegap文档中,需要首先触发设备就绪功能。
我不知道为什么,但是
$(document).on("pageshow", "#keeperList", function(){
listAllKeepers();
});
首先开火。
我无法发布整个代码,因为它太多了。
<script type="text/javascript" src="js/cordova.js"></script>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/jquery.mobile-1.3.1.js"></script>
<script type="text/javascript" src="js/db.js"></script>
<script type="text/javascript">
var db;
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
alert("PhoneGap is ready!");
db = window.openDatabase("rentManag", "3.7.11", "Rent Manag", 100000000);
db.transaction(createTable, errorCB, successCB);
}
$(document).on('pageshow', "#keeperList", function () {
listAllKeepers();
});
</script>
答案 0 :(得分:2)
你必须等待JQuery Mobile&#34; pagecreate&#34;和Phonegap&#34; deviceready&#34;如果您将phonegap与JQuery Mobile结合使用,则会发生此事件。这可确保正确加载两个框架。你就是这样做的:
var jqmReady = $.Deferred();
var pgReady = $.Deferred();
// jqm ready
$(document).bind("pagecreate", jqmReady.resolve);
// phonegap ready
document.addEventListener("deviceready", pgReady.resolve, false);
$(document).on('pagecreate',function(event,data)
{
});
// all ready :)
$.when(jqmReady, pgReady).then(function () {
listAllKeepers();
});
答案 1 :(得分:1)
要回答您的问题,请查看下面的代码。这是我自己使用的解决方法。它可能不是最好的解决方案,但它可以完成工作。
它做什么: - 在设备就绪时,它将值设置为true。 - 在页面加载时,您访问一个等待该值为true的函数。如果没有,它会循环直到它。 - 这可以防止PhoneGap尚未加载任何内容的错误。
// device ready
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
// let the function "isDeviceReady" know that the event "deviceready" has been fired
window.deviceReady = true;
}
// callback function to check if device is ready
function isDeviceReady(value, action) {
if (window.deviceReady === true) {
switch (action) {
case "listAllKeepers":
listAllKeepers();
break;
case "listAllKeepersValue": // if you had a value
listAllKeepers(value);
break;
}
} else {
window.setTimeout("isDeviceReady(\"" + value + "\", \"" + action + "\");", 100);
}
}
// do stuff on page show
$(document).on('pagebeforeshow', '#yourpageid', function (event, data) {
isDeviceReady('', listAllKeepers);
});