Я (очень) медленно обновляю сайт со статическими файлами со всеми последними вкусностями. Я использую yepnope (в комплекте с новым Modernizr.load) для обработки асинхронной загрузки зависимостей, и мне нужно, чтобы он тем временем был обратно совместим с текущей базой кода.
Для этого требуется, чтобы я или обернул каждый отдельный вызов jQuery по всему миру (слишком большая задача, которую можно выполнить в ближайшем будущем) в оболочке yepnope()
, или , тем более творческим решением является proxy функция jQuery ready()
через мою собственную, и для задержки выполнения любого кода $
до тех пор, пока обратный вызов из yepnope не будет готов ... Фактическая функция ready()
jQuery будет обработчиком, как только тест 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
)!
Я искренне ищу любую критику, особенно от Алекса Секстона :) lol