2014-03-19 130 views
3

我正在使用phonegap和jQuery Mobile构建一个android应用程序。设备准备就绪之前运行的jquery移动函数

从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

您是否尝试将'listAllKeepers();'放在'onDeviceReady'中? –

+0

它以这种方式运行,但我需要它运行,即使我从不同的html页面返回页面。我可以用错误的方式进行转换吗?这是我回来的方式; 'function successOnFormSubmission(){alert(“Record Saved”); window.location的= “index.html的”; } @DawsonLoudon – Miru

+1

phonegap的最佳做法是不改变位置,应用程序应该是'单页'应用程序。原因是这种确切的情况,试图让东西加载和重新加载。如果您使用单页模式,则不必担心诸如“页面重新加载怎么办?”之类的问题 –

回答

0

要回答您的问题,请查看下面的代码。这是我自己使用的解决方法。这可能不是最好的解决方案,但它可以完成工作。

它是做什么的: - 在设备准备就绪时,它将值设置为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); });

1

你必须等待jQuery Mobile的 “pagecreate” 和PhoneGap的 “deviceready” 事件,如果你在与jQuery Mobile的组合使用PhoneGap的。这确保了两个框架都正确加载。这是你如何做到这一点:

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(); 
           });