设备内部需要准备好文件吗?

时间:2015-01-18 16:18:23

标签: javascript jquery cordova

在phonegap中,我需要在deviceready事件函数中使用$(document).ready(...)吗?我可以确定在调用deviceready事件时是否加载了文档吗?

示例:

document.addEventListener('deviceready', 
   function() {
            $(document).ready(function() { // is this too much? 
                initCampusWeb(); 
            });
        }, false);

4 个答案:

答案 0 :(得分:4)

这种方式的工作原理是jQuery(document).ready()首先触发,然后deviceready触发。

我通常会像这样设置我的代码:

jQuery(document).ready(function () {
    // do document ready stuff
}).on('deviceready', function () {
    // do deviceready stuff, put all calls to plugins in here
});

所以关于initCampusWeb去哪里的问题取决于你在该函数中做了什么。如果它使用插件,请将其放在deviceready处理程序中。

答案 1 :(得分:2)

我不确定在文档准备好之后deviceready总是会触发,所以我采取了以下异步方法,如下所示:

bindEvents: function () {
    var me = this;

    document.addEventListener('deviceready', function () {
        me.onDeviceReady();
    }, false);

    $(document).ready(function () {
        me.onDocumentReady();
    });
},

documentReady: false,
onDocumentReady: function () {
    this.documentReady = true;
    this.checkReady();
},

deviceReady: false,
onDeviceReady: function () {
    this.deviceReady = true;
    this.checkReady();
},

checkReady: function (id) {
    if (this.documentReady && this.deviceReady) this.load();
},

load: function () {
    // do stuff
}

这样,您不会冒险在事件发生后附加处理程序。可能有点矫枉过正,但是给了我完全的信心和异步可扩展性(如果我想让load()等待另一个事件完成)。

答案 2 :(得分:1)

根据cordova文件:

  

Cordova由两个代码库组成:native和JavaScript。虽然   本机代码加载,显示自定义加载图像。的然而,   只有在DOM加载后才会加载JavaScript。这意味着Web应用可能会加载   可能在之前调用Cordova JavaScript函数   相应的本机代码可用。

     

Cordova完全加载后,deviceready事件将触发。一旦   事件触发,您可以安全地调用Cordova API。应用程序   通常使用document.addEventListener附加一个事件侦听器   已经加载了HTML文档的DOM。

     

deviceready事件的行为与其他事件略有不同。任何   在deviceready事件触发后注册的事件处理程序   立即调用回调函数。

$(document).on("ready")只有在页面文档对象模型(DOM)准备好执行JavaScript代码后才会运行。

您只能使用document.addEventListener('deviceready')作为该prupouse

答案 3 :(得分:1)

这是正确的方法:

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {

   // Your code here

}