1

我有一个使用 JQM 1.3.0 和 Phonegap 的移动应用程序。该应用程序调用 Web 服务并使用 AJAX 填充所有页面的内容。在浏览器中开发并直接调用我的脚本时,一切正常:

applicationScripts()

function applicationScripts(){

    $(document).on("pageinit", "#page1, #page2,  #page3, #page4,  #page5", function() {

        $.ajax({
            //make call and populate content.
        })
    });
}

但是,一旦我从 deviceready 侦听器内部调用该函数,#page1 就不会获取数据。第 2-5 页工作正常。(我也尝试将事件侦听器嵌套在<body onload="onLoad()">函数中,但结果相似。)

document.addEventListener('deviceready', applicationScripts, false);

function applicationScripts(){

    $(document).on("pageinit", "#page1, #page2,  #page3, #page4,  #page5", function() {

        $.ajax({
            //#page1 not getting content. 
        })
    });
}

这是我的文件的开头。我所有的脚本都在 application.js 文件中。

<script type="text/javascript" src="js/cordova.ios.js"></script>    
<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/jquery.mobile-1.3.0.min.js"></script>
<script src="js/application.js" ></script>

我不知道这是否是一些文件/事件在其他文件/事件之前加载的时间问题,但似乎我已经尝试了脚本命令的所有可能组合以及调用“deviceready”的不同方式。任何帮助表示赞赏!

4

2 回答 2

0

你可以试试下面的代码:

var deviceReadyDeferred = $.Deferred();
var jqmReadyDeferred = $.Deferred();

document.addEventListener("deviceReady", deviceReady, false);

function deviceReady() {
  deviceReadyDeferred.resolve();
}

$(document).one("mobileinit", function () {
  jqmReadyDeferred.resolve();
});

$.when(deviceReadyDeferred, jqmReadyDeferred).then(doWhenBothFrameworksLoaded);

function doWhenBothFrameworksLoaded() {
  $(document).on("pageinit", "#page1, #page2,  #page3, #page4,  #page5", function() {
    $.ajax({
          //Do something here
    })
});
}
于 2013-04-04T00:21:59.517 回答
0

我已经完成了几个 PhoneGap 项目,但我从未在deviceready函数内绑定页面事件。

只需在js文件中绑定页面事件即可。它工作得很好。毕竟我有 3 个 PhoneGap 项目在生产中运行,并且由于这个原因,没有一个项目报告有问题。

我在我的项目中使用deviceready了功能来禁用后退按钮,而不是初始化任何页面等。

希望对您有所帮助。

于 2013-04-03T04:13:38.830 回答