如何在加载 jQuery 之前对回调进行排队



我在应用程序中切换到使用Require.JS并立即面临此问题:

我曾经使用内联JS在加载DOM的某些部分后发起某些调用。现在显然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();
    }
});

您选择了两种相互不兼容的脚本技术:

  1. 延迟加载 jQuery
  2. 加载 DOM 时对 jQuery 的内联调用

你根本无法同时做到这两点。 如果你真的需要以延迟的方式加载jQuery,那么你也必须推迟jQuery的使用,直到jQuery被加载。 Requires.js 有一个可选的回调,它会让你知道何时加载 jQuery。 此时,您可以运行其他初始化 jQuery 代码。

如果你想尽可能多地保留这两个,你可以让每个内联JS将一个回调注册到一个回调数组中,然后创建一个函数,在加载jQuery时执行所有这些回调。 如果你想要完成的事情值得这么多麻烦,我会有点惊讶。

我建议,如果你想尽快执行内联javascript,那么要么让它独立于jQuery(这样它可以随时运行),要么停止延迟jQuery的加载,这样它就可以在你的DOM加载时使用。

最新更新