gpt4 book ai didi

javascript - 是的, "Proxy"-ing jQuery 的 ready() 函数

转载 作者:行者123 更新时间:2023-11-30 09:05:25 24 4
gpt4 key购买 nike

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

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

手头的问题:

Am I creating a disaster here? Is this a suitable workaround for my short-term issue of a poorly implemented sitewide mess of spaghetti DOM-centric code?

更新 #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 属性)。

Google 了一会儿,找到了jQl, asynchronous jQuery loader ,它有办法处理在实际 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>

关于javascript - 是的, "Proxy"-ing jQuery 的 ready() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com