jQuery Mobile在Phonegap deviceready内部没有构建第一个动态页面

时间:2013-04-03 02:41:04

标签: ajax cordova jquery-mobile hybrid-mobile-app

我有一个使用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.
        })
    });
}

但是,一旦我从设备监听器内部调用该函数,#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>

我不知道某些文件/事件在其他人之前加载是否是时间问题,但似乎我已经尝试了所有可能的脚本命令组合和不同的方式来调用&#39; deviceready&# 39 ;.任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

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

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

我在我的项目中使用deviceready函数来禁用后退按钮,而不是任何页面等等。

希望能帮到你。

答案 1 :(得分: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
    })
});
}