2014-03-19 169 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(); 
           });