我正在开发“一个页面应用程序”,并且正在寻找一种方法来确保页面渲染完成。

我的应用程序流程如下:


绘制导航标记
添加一个叠加层,指示正在获取页面内容
实际加载内容并将其注入页面内容区域


现在这是我的不足之处:

页面内容注入后,我将初始化依赖于标记的窗口小部件(引导程序,自定义事件等)。

这意味着页面内容仍然可以被操纵,因此,我想知道是否
我可以将jQuery的延迟对象(以及如何使用)用作函数队列,并使用可以执行异步操作的函数以及普通的旧同步函数。

使用该方法,我希望能够知道何时所有小部件都已初始化,然后删除页面加载指示器。

最佳答案

您可以使用jQuery的延迟对象来创建异步函数队列。

这是一个示例实现(通过jsfiddle / coffeeandcode):

var Queue = function() {
    var lastPromise = null;

    this.add = function(obj, method, args, context) {
        var methodDeferred = $.Deferred();
        var queueDeferred = this.setup();
        if(context === undefined) { context = obj; }

        // execute next queue method
        queueDeferred.done(function() {


            // call actual method and wrap output in deferred
            setTimeout(function() {
                obj[method].apply(context, args);
                methodDeferred.resolve();
            }, 100);


        });
        lastPromise = methodDeferred.promise();
    };

    this.setup = function() {
        var queueDeferred = $.Deferred();

        // when the previous method returns, resolve this one
        $.when(lastPromise).always(function() {
            queueDeferred.resolve();
        });

        return queueDeferred.promise();
    }
};


您可以在此处查看运行中的代码:

http://jsfiddle.net/coffeeandcode/yg9P6/

09-12 21:24