我(非常)緩慢地獲得一個大規模的靜態文件站點與所有最新的好東西。我正在使用yepnope(與新Modernizr.load一起打包)來處理異步依賴加載,同時我需要它與當前代碼庫向後兼容。Yepnope和「代理」 - jQuery的ready()函數
這就要求我要麼包裹在yepnope()
的包裝每一個jQuery的調用站點範圍(太大的任務在不遠的將來做),或更有創意的解決方案是代理 jQuery的ready()
功能通過我自己的,並延遲任何$
代碼的執行,直到從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
,它只會返回true
一次REAL加載jQuery(代理沒有length
)!
我認真尋求任何批評 - 尤其是來自亞歷克斯·塞克斯頓:)哈哈
我相信這是儘可能我自己。目前,我的主要目標是利用jQuery的'ready'來重寫所有代碼,以便與yepnope一起打包。只是試圖提供一個分階段的方法來立即獲得一些異步優勢。 – philwinkle 2011-03-25 20:29:32
嗨!我想,唯一讓我困惑的是,當jQuery不可用時,這種情況不會馬上執行嗎?也許你會添加一個'load'部件或者其他的東西,但是現在,它總是調用'complete'然後執行。我認爲最好的行動方式是創建一個jsfiddle或一個jsbin示例。我很樂意介紹一些代碼。 – 2011-03-27 02:30:52