我切换到在应用程序中使用 Require.JS 并立即遇到了这个问题:
一旦加载了 DOM 的某些部分,我曾经使用内联 JS 来启动某些调用。现在显然 jQuery 仅在执行这些调用后才加载,从而导致错误,因为 jQuery ($) 未定义。
在加载之前为 jQuery 排队回调的最佳方法是什么?如果 jQuery 已经加载,我需要它们立即触发,或者一旦加载就立即触发。
我切换到在应用程序中使用 Require.JS 并立即遇到了这个问题:
一旦加载了 DOM 的某些部分,我曾经使用内联 JS 来启动某些调用。现在显然 jQuery 仅在执行这些调用后才加载,从而导致错误,因为 jQuery ($) 未定义。
在加载之前为 jQuery 排队回调的最佳方法是什么?如果 jQuery 已经加载,我需要它们立即触发,或者一旦加载就立即触发。
这就是我所做的
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();
}
});
或者
requirejs(['jquery'], function ($) {
for (var cb in _DomReadyCallback) {
cb.call();
}
});
您选择了两种相互不兼容的脚本技术:
你根本不能同时做这两个。如果您确实需要以延迟方式加载 jQuery,那么您还必须延迟使用 jQuery,直到加载 jQuery。Requires.js 有一个可选的回调,可以让你知道 jQuery 何时加载。此时,您可以运行其他初始化 jQuery 代码。
如果你想尽可能多地保留这两个,你可以让每个内联 JS 将一个回调注册到一个回调数组中,然后创建一个函数,在加载 jQuery 时执行所有这些回调。如果您要完成的工作值得这么多麻烦,我会感到有些惊讶。
我建议,如果您希望内联 javascript 尽快执行,那么要么使其独立于 jQuery(因此它可以随时运行),要么停止延迟 jQuery 的加载,以便它可以用作您的 DOM 加载。