Javascript jQuery延迟与jQuery Mobile结合使用;pageshow“;事件

Javascript jQuery延迟与jQuery Mobile结合使用;pageshow“;事件,javascript,jquery,jquery-mobile,promise,deferred,Javascript,Jquery,Jquery Mobile,Promise,Deferred,我尝试在上实现类似于示例的东西 简言之: 加载数据(用于日历和其他一些内容) 当用户第一次访问jQuery移动页面时,日历被初始化 加载两个数据并初始化日历后,会发生其他情况 问题是: 当我在“#overview”以外的其他页面上打开该页面时,它仍然会触发$。when,即使尚未触发日历事件。当我切换到“#概述”页面时,.one事件会正确触发 在控制台中: ------------------------------------------------------------- page: "

我尝试在上实现类似于示例的东西

简言之:

  • 加载数据(用于日历和其他一些内容)
  • 当用户第一次访问jQuery移动页面时,日历被初始化
  • 加载两个数据并初始化日历后,会发生其他情况
问题是: 当我在“#overview”以外的其他页面上打开该页面时,它仍然会触发$。when,即使尚未触发日历事件。当我切换到“#概述”页面时,.one事件会正确触发

在控制台中:

-------------------------------------------------------------
page: "#initial"
*** data received *and* calendar initialized
[Object, "success", Object] undefined
-------------------------------------------------------------
page: "#overview"
going to initialize calendar
我拥有的代码:

    var getData = $.getJSON("./testDeferredData.php");

    function initializeCalendar() {
        var deferred = $.Deferred();
        $(document).one("pageshow", "#overview", function(event,ui) {
            console.log("going to initialize calendar");
            deferred.resolve("calendar initialized");
            return deferred.promise();
        });
    }

    $.when(getData, initializeCalendar() ).then(function(data,calendar) {
        console.log("*** data received *and* calendar initialized");
        console.log(data,calendar);
    });
我是一个新的延迟和承诺,所以很可能我犯了一个愚蠢的错误。
建议?

如果您传递的参数不是延迟/承诺对象,它将被视为已解决。因此,您必须正确地返回承诺对象

function initializeCalendar() {
    var deferred = $.Deferred();
    $(document).one("pageshow", "#overview", function(event,ui) {
        console.log("going to initialize calendar");
        deferred.resolve("calendar initialized");    
    });
    //return promise object immediately
    return deferred.promise();
}

您的
return deferred.promise()
错误地位于事件处理程序中,而不是InitializeLandar函数中。函数返回未定义的,并将其转换为已解析的承诺。