jquery mobile 功能在设备准备好之前运行
Posted
技术标签:
【中文标题】jquery mobile 功能在设备准备好之前运行【英文标题】:jquery mobile function running before the device ready 【发布时间】:2014-04-26 06:21:19 【问题描述】:我正在使用 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>
【问题讨论】:
您是否尝试将listAllKeepers();
放入onDeviceReady
?
它以这种方式运行,但即使我从不同的 html 页面返回该页面,我也需要它运行。我可以使用错误的方式进行过渡吗?这是我回来的方式; function successOnFormSubmission() alert("Record Saved"); window.location="index.html";
@DawsonLoudon
phonegap 的最佳做法是不要更改位置,应用程序应该是“单页”应用程序。原因就是这种情况,试图加载和重新加载东西。如果您使用单页模式,则不必担心what if the page reloads?
之类的问题
【参考方案1】:
如果您将 phonegap 与 JQuery Mobile 结合使用,则必须等待 JQuery Mobile“pagecreate”和 Phonegap“deviceready”事件。这可确保正确加载两个框架。这就是你的做法:
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();
);
【讨论】:
【参考方案2】:要回答您的问题,请查看下面的代码。这是我自己使用的解决方法。这可能不是最好的解决方案,但它可以完成工作。
它有什么作用: - 在设备准备就绪时,它会将值设置为 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);
);
【讨论】:
以上是关于jquery mobile 功能在设备准备好之前运行的主要内容,如果未能解决你的问题,请参考以下文章
jQuery Mobile 面板在页面完全加载之前在初始加载时显示,速度较慢的设备
jQuery mobile +主干:无法在初始化之前调用listview上的方法