首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yepnope和"Proxy"-ing jQuery()函数

Yepnope和"Proxy"-ing jQuery()函数
EN

Stack Overflow用户
提问于 2011-03-25 05:01:52
回答 1查看 1.4K关注 0票数 1

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

这要求我要么在jQuery的包装器中包装yepnope()站点范围内的每个单独的$调用(在不久的将来要完成的任务太大),要么更有创意的解决方案是通过我自己的ready()函数代理jQuery的ready()函数,并将任何$代码的执行推迟到yepnope的回调准备就绪之后.一旦yepnope测试满足jQuery的准备,jQuery的实际ready()函数将成为处理程序。

当前的问题:

我在这里制造灾难吗?这是一个适合我的短期问题的解决办法吗?我的短期问题是一个在现场范围内混乱的以意大利面、DOM为中心的代码?

更新#3

一种更深思熟虑的方法,它也解释了匿名函数直接传递给jQuery的原因。这是第三次尝试尽可能少地保留$(function(){})调用和$(document).ready()调用的功能。

代码语言:javascript
复制
    (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 (代理没有length)之后才返回!

我诚恳地寻求任何批评,尤其是亚历克斯·塞克斯顿:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-20 20:12:08

尝试使用philwinkle的例子,它不起作用(至少在FF3.6中产生了临时jQuery变量有.length支柱)。

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

代码语言:javascript
复制
<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>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5428717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档