使用jQuery的ready()函数

我(非常)缓慢地获得一个大规模的静态文件站点及所有最新的好东西。 我正在使用yepnope(与新Modernizr.load一起打包)来处理异步依赖加载,同时我需要它与当前代码库向后兼容。

这要求我在yepnope()的包装器中包装每个单一的jQuery调用yepnope()在不久的将来要做的任务太多yepnope() ,或者更有创意的解决方案是通过我自己的方法代理jQuery的ready()函数,推迟任何$ code的执行,直到yepnope的回调准备就绪为止...... jQuery的实际ready()函数将是处理器,一旦yepnope测试满足jQuery的准备。 合理?

手头的问题是:

我在这里制造灾难吗? 这是一个适合我的短期问题的一个适当的解决方法,这是一个糟糕的实现网站范围的意大利面条以DOM为中心的代码?

更新#3

一种更加深思熟虑的方法,其中也包括匿名函数直接传递给jQuery的非准备。 这是尝试尽可能少地保留$(function(){})调用以及$(document).ready()调用的功能的第三次尝试。

    (function( window, undefined ) {
    var jQuery = (function(fn) {
    if (typeof fn === 'function') {
        yepnope({
            test: window.jQuery.length,
            complete: function() {
                fn();
            }
        });
    }
    var jQuery = 
        _jQuery = window.jQuery,
        _$ = window.$;
    jQuery = jQuery.prototype = {
        constructor: jQuery,
        ready: function( fn ) {
            yepnope({
                test: window.jQuery.length,
                complete: function() {
                    fn();
                }
            });
        }
    };
    return jQuery;
    });
    window.jQuery = window.$ = jQuery;
    })(window);

这很性感,因为虽然它重复了jQuery的加载行为,但它并没有固有的长度......通过使用yepnope来测试window.jQuery.length ,它只会在REAL jQuery加载后才返回true (代理没有length )!

我认真寻求任何批评 - 尤其是Alex Sexton :)大声笑


试图使用philwinkle的例子,它不起作用(至少生成的临时jQuery变量在FF3.6中有.length prop)。

Google搜索了一段时间,发现了jQl,异步jQuery加载器,它可以在实际的jQuery加载之前调用$(document).ready。 借用了一些代码,得到:

<script type="text/javascript">
var jQ = {
    queue: [],
    ready: function (f) {
        if (typeof f=='function') {
            jQ.queue.push(f);
        }
        return jQ;
    },
    unq: function () {
        for (var i = 0; i < jQ.queue.length; i++) jQ.queue[i]();
        jQ.queue = null;
    }
};
if (typeof window.jQuery == 'undefined') { window.jQuery = window.$ = jQ.ready; }

yepnope({
    load: '//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js',
    complete: function () {
        jQ.unq();
    }
});
</script>
链接地址: http://www.djcxy.com/p/14207.html

上一篇: ing jQuery's ready() function

下一篇: Difference between jQuery.extend and jQuery.fn.extend?