Jquery mobile 在'中正确注册事件;PhoneGap+;jquerymobile';应用

Jquery mobile 在'中正确注册事件;PhoneGap+;jquerymobile';应用,jquery-mobile,cordova,android-2.2-froyo,Jquery Mobile,Cordova,Android 2.2 Froyo,我试图定义在Android应用程序中为PhoneGap和jQuery Mobile注册初始化事件(jQuery样式)的正确方法 在研究了文档之后,我得出了以下结论: $('#index-page').live('pageinit', function () { // <-- fires $(document).bind('deviceready', function () { // <-- !fires // ... }); }); 有人能解释一下第

我试图定义在Android应用程序中为PhoneGap和jQuery Mobile注册初始化事件(jQuery样式)的正确方法

在研究了文档之后,我得出了以下结论:

$('#index-page').live('pageinit', function () { // <-- fires
    $(document).bind('deviceready', function () { // <-- !fires
        // ...
    });
});
有人能解释一下第一类活动登记有什么问题吗?哪种类型比较好


先决条件:

  • PhoneGap v1.2
  • jQuery Mobile v1.0rc2
  • EclipseV3.7.1

请坚持使用最后一种方法,因为这是PhoneGap推荐的,您的第一种方法可能不起作用,因为您绑定
设备已经太晚了(即:在绑定之前已经触发了)。这是因为
pageinit
的启动相对较晚

您可以使用jQuery方式:

$(window).load(function() {
    $(document).bind('deviceready', function () { 
        // ...
    });
});

在这种情况下,我发现延迟对象的使用更干净/更安全。这是我通常做的:


我将进一步使用Michael的示例,并触发一个定制的“PG_pageinit”JavaScript事件。这将在触发两个事件(“pageinit”、“deviceready”)后触发。这样,您只需要在(已经编写的)外部JavaScript文件中更改已注册事件的名称

因此,使用Michael的代码(将“mobileinit”事件稍微更改为“pageinit”):

在您的其他JavaScript文件上,每当您想要注册此新事件时,请使用以下命令:

$(document).bind("PG_pageinit", function(){
  alert('PG_pageinit was just fired!');    
  // do your thing...
});

cordova 1.9.0在Android 2.3上测试,坚持W3C事件注册模型非常有效。。。至于建议的jQuery风格,它对我不起作用:
devicerady
事件不会触发。。。谢谢你的建议!谢谢你的建议!我也会试试。这比Cordova/PhoneGap使用的“标准”回调混乱要好得多。理想情况下,我会在index.html中这样做。对吗?我想调用一个JS文件,该文件包含我的应用程序的所有实时或延迟事件,这样我就可以拥有一个中心位置,所有事件都由我注册。可能吗?这个设计好吗?如果是,我如何做到这一点?我尝试使用$.getScript,但这会为我的应用程序呈现一个空白页面。请建议。@Mustafa您可以使用闭包,并创建一个初始化所有内容的模块。然后调用
yourModule.yournitmethod(),而不是/*做你的事*我对index.html中的所有JS做了一些更改(读取清理),现在getScript工作了。谢谢你的回答。如果我把我的
$(文档)放在('event')
上,在//do your thing中,JQM事件永远不会触发,这是怎么回事?
var jqmReady = $.Deferred();
var pgReady = $.Deferred();

// jqm ready
$(document).bind("mobileinit", jqmReady.resolve);

// phonegap ready
document.addEventListener("deviceready", pgReady.resolve, false);

// all ready :)
$.when(jqmReady, pgReady).then(function () {
  // do your thing
});
var jqmReady = $.Deferred(),
pgReady = $.Deferred();

// jqm page is ready
$(document).bind("pageinit", jqmReady.resolve);

// phonegap ready
document.addEventListener("deviceready", pgReady.resolve, false);

// all ready, throw a custom 'PG_pageinit' event
$.when(jqmReady, pgReady).then(function () {
  $(document).trigger("PG_pageinit"); 
});
$(document).bind("PG_pageinit", function(){
  alert('PG_pageinit was just fired!');    
  // do your thing...
});