我切换到在应用程序中使用Require.JS,并立即面临此问题:如何在加载jQuery之前排队回调?
我曾经使用内联JS启动某些调用一旦某些部分的DOM加载。现在显然只有在这些调用被执行后才加载jQuery,从而导致错误,因为jQuery($)未定义。
jquery加载之前入队回调的最佳方式是什么?如果jQuery已经加载,我需要它们立即触发,或者立即加载它。
我切换到在应用程序中使用Require.JS,并立即面临此问题:如何在加载jQuery之前排队回调?
我曾经使用内联JS启动某些调用一旦某些部分的DOM加载。现在显然只有在这些调用被执行后才加载jQuery,从而导致错误,因为jQuery($)未定义。
jquery加载之前入队回调的最佳方式是什么?如果jQuery已经加载,我需要它们立即触发,或者立即加载它。
您选择两种互不相容的脚本技术:
你根本就做不到这两项的一起。如果你真的需要以延迟的方式加载jQuery,那么在加载jQuery之前,你还必须推迟使用jQuery。 Requires.js有一个可选的回调函数,可以让你知道何时加载jQuery。此时,您可以运行其他初始化jQuery代码。
如果你想保持尽可能多的这些,你可以让每一行内联JS将一个回调注册到一个回调数组中,然后创建一个函数,在jQuery加载时执行所有这些回调。如果你想要完成的事情值得这么多麻烦,我会感到有些惊讶。
我建议如果你想让内联JavaScript尽快执行,那么要么让它独立于jQuery(所以它可以随时运行),要么停止推迟jQuery的负载,以便它可以用作你的DOM加载。
这是我做的
var _DomReadyCallback = _DomReadyCallback || [];
_DomReadyCallback.push(function() {
alert('Jquery Loaded');
});
jQuery是通过数组装载循环之后和调用所有的回调
// This code should come after jQuery is loaded (add it on the jQuery onload callback or append it at the end of the jQuery file)
$(function(){
for (var cb in _DomReadyCallback) {
cb.call();
}
});
OR
requirejs(['jquery'], function ($) {
for (var cb in _DomReadyCallback) {
cb.call();
}
});
我的意思是......如果你**绝对必须**为你的项目使用这种方法...然后我会使用〜300的setTimeout函数。 – Ohgodwhy
我不认为setTimeout的是一个好方法,因为无法保证jQuery的文件将在300 ms内被加载。 –