我在应用中切换到使用Require.JS并立即遇到了这个问题:
我曾经使用内联JS在加载DOM的某些部分时启动某些调用。现在显然jQuery只在执行这些调用后加载,因此导致错误,因为jQuery($)未定义。
在加载jQuery之前将jQuery的回调排入队列的最佳方法是什么?如果jQuery已经加载,我需要立即触发它们,或者一旦加载就立即触发它。
答案 0 :(得分:2)
这就是我的工作
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();
}
});
答案 1 :(得分:1)
您选择了两种互不兼容的脚本技术:
你根本不能同时做这两件事。如果你真的需要以延迟的方式加载jQuery,那么你将不得不推迟使用jQuery直到加载jQuery。 Requires.js有一个可选的回调函数,可以在加载jQuery时通知你。此时,您可以运行其他初始化jQuery代码。
如果你想尽可能多地保留这两者,你可以让每一行内联JS在一个回调数组中注册一个回调,然后创建一个函数,在jQuery加载时执行所有这些回调。如果你想要完成的事情值得这么麻烦,我会有点惊讶。
我建议如果你想让内联javascript尽快执行,那么要么让它独立于jQuery(这样它可以随时运行)或者停止推迟jQuery的加载,以便它可以用作你的DOM负荷。