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上的方法

jquery mobile 如何获取触摸的坐标

如果用户在文档准备好之前悬停,jQuery .hover 会导致问题

如何查看后台加载的 jQuery Mobile?

我的.on Swipe只能在它休息之前工作一次并且必须刷新一切--JQuery Mobile / Javascript